Toon posts:

[Delphi] database refresh probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een programmaatje waarbij per klant een aantal gebeurtenissen kan worden bijgehouden. Per klant is een overzichtje op te vragen van de bijbehorende gebeurtenissen.

De gebeurtenissen (bijv. klantbezoek, schriftelijk contact, telefonisch contact) hebben een aantal attributen die via formulieren kunnen worden ingevuld.

Nu is het grote probleem dat als ik een nieuwe gebeurtenis heb toegevoegd (of een bestaande heb geedit) via het formuliertje en ik de occurence post hij dit niet op het begin-overzichts-venster bijwerkt.

Nu weet ik dat dit normaal gebeurt via het openen en sluiten van een tabel, maar dit werkt niet goed.
Ik heb een knop gemaakt om de tabellen te openen en sluiten (om te testen), maar dan krijg ik het rare geval dat hij soms pas na 3 keer drukken refreshed en soms in een keer :?:?

Heeft iemand ervaring hiermee? kan iemand mij hiermee helpen?

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 23:25

Delphi32

Heading for the gates of Eden

Iets meer info zou handig zijn:
-wat voor database gebruik je?
-hoe heb je de database connectie opgezet? Welke components?
-hoe worden de nieuwe records gepost?
-hoe wordt je grid gevuld?

Klinkt trouwens als een transactie-probleem. Heb je een transaction-component aan je TDatabase en TTable/TQueries hangen?

Verwijderd

Topicstarter
Acces Database
ADO tabellen
connectie via microsoft jet 4.0
Overzichtgrid wordt gevuld via de datasource van de tabel

de formulieren worden gedeeltelijk via DBEditvelden ingevuld en gedeeltelijk via maskedits die achteraf erbij geedit (gepost) worden.

opmerkelijk is te zeggen dat ik op allebei de formulieren dezelfde tabel gedeclareerd heb.

Ik heb veel problemen met het refreshen van de tabellen
Soms zie ik in het formulier occurences die ik al gedelete heb en in het overzichtsformulier idem dito

p.s. damn wat is dit moeilijk uit te leggen...

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Laat eens een stukje code zien waar je 'post'?

Mother, will they like this song?


Verwijderd

Topicstarter
Dit is het gedeelte als de knop 'invoer klantenbezoek' wordt ingedrukt
code:
1
2
3
4
5
6
7
klantbezoekinvoer.Show;
klantbezoekinvoer.TBGebeurtenissen.Open;
klantbezoekinvoer.TBGebeurtenissen.Append;
klantbezoekinvoer.TBGebeurtenissen['GebeurtenisSoort']:='klantbezoek';
klantbezoekinvoer.TBGebeurtenissen['KlantCode']:=GebeurtenisOverzicht.TBKlanten['KlantCode'];
klantbezoekinvoer.TBGebeurtenissen['Datum']:=Date;
klantbezoekinvoer.TBGebeurtenissen.Post;

Dit is het gedeelte als het 'klantenbezoekinvoer' formulier
afsluit en dus de gebeurtenis opsla
code:
1
2
3
4
5
  KlantBezoekInvoer.TBGebeurtenissen.Post;
  KlantBezoekInvoer.TBGebeurtenissen.Close;
  KlantBezoekInvoer.Close;
  GebeurtenisOverzicht.TBGebeurtenissen.Close;
  Gebeurtenisoverizcht.TBGebeurtenissen.Open;

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 23:25

Delphi32

Heading for the gates of Eden

Op vrijdag 12 juli 2002 21:25 schreef mrjooper het volgende:
Dit is het gedeelte als de knop 'invoer klantenbezoek' wordt ingedrukt
code:
1
2
3
4
5
6
7
klantbezoekinvoer.Show;
klantbezoekinvoer.TBGebeurtenissen.Open;
klantbezoekinvoer.TBGebeurtenissen.Append;
klantbezoekinvoer.TBGebeurtenissen['GebeurtenisSoort']:='klantbezoek';
klantbezoekinvoer.TBGebeurtenissen['KlantCode']:=GebeurtenisOverzicht.TBKlanten['KlantCode'];
klantbezoekinvoer.TBGebeurtenissen['Datum']:=Date;
klantbezoekinvoer.TBGebeurtenissen.Post;

Dit is het gedeelte als het 'klantenbezoekinvoer' formulier
afsluit en dus de gebeurtenis opsla
code:
1
2
3
4
5
  KlantBezoekInvoer.TBGebeurtenissen.Post;
  KlantBezoekInvoer.TBGebeurtenissen.Close;
  KlantBezoekInvoer.Close;
  GebeurtenisOverzicht.TBGebeurtenissen.Close;
  Gebeurtenisoverizcht.TBGebeurtenissen.Open;
Twee keer een Post op dezelfde Table? Ben benieuwd wat er dan in je DB komt te staan :)
Als ik het goed zie heb je dus 2x een TADOTable component die gelinkt zijn aan dezelfde tabel Gebeurtenissen. Dat mag natuurlijk (of het handig of mooi is is een ander verhaal), maar het is vragen om moeilijkheden. Doe eens het volgende:
1. je main form met de gebeurtenisoverzichten van data laten voorzien door een TADOQuery
2. je invoerform de gegevens laten verzamelen (NIET in data-aware controls) en bij OK-knop de boel met een TADOQuery inserten in de database.
3. na 2. doe je een .Close en .Open van je query voor je mainform -> voila, werkt!

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:22
Op zaterdag 13 juli 2002 00:08 schreef Delphi32 het volgende:

1. je main form met de gebeurtenisoverzichten van data laten voorzien door een TADOQuery
2. je invoerform de gegevens laten verzamelen (NIET in data-aware controls) en bij OK-knop de boel met een TADOQuery inserten in de database.
3. na 2. doe je een .Close en .Open van je query voor je mainform -> voila, werkt!
Ik kan dit alleen maar bijtreden...
Gebruik een Query component ipv een table component en schrijf een INSERT query om gegevens toe te voegen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
jullie hebben 100% gelijk,
dit was geen eindoplossing, maar iets waar ik nog mee aan het stoeien was, vandaar de kromme code.
Ik heb het inmiddels opgelost door datasets te gebruiken in het 2e formulier die gelinkt zijn aan de ADOtabellen uit het eerste formulier. Op die manier zit je eigenlijk maar op een plaats in de tabel te werken en niet met twee keer dezelfde tabel geopend.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 23:25

Delphi32

Heading for the gates of Eden

Op zondag 14 juli 2002 11:35 schreef mrjooper het volgende:
jullie hebben 100% gelijk,
dit was geen eindoplossing, maar iets waar ik nog mee aan het stoeien was, vandaar de kromme code.
Ik heb het inmiddels opgelost door datasets te gebruiken in het 2e formulier die gelinkt zijn aan de ADOtabellen uit het eerste formulier. Op die manier zit je eigenlijk maar op een plaats in de tabel te werken en niet met twee keer dezelfde tabel geopend.
Ok, valide oplossing.
Nog 1 tip: gebruik voortaan TDataModules om je tabellen en queries te verzamelen, dat maakt het delen van de datasets wel zo gemakkelijk.
Pagina: 1