Toon posts:

[Delphi] ADO vraag

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Sinds ik ADO gebruik om Access databases te benaderen is er één probleem dat ik nog steeds niet heb opgelost. Het betreft de Execute() procedure in het TADOCommand component. Als ik deze gebruik om een insert query uit te voeren en daarna weer de data met de TADODataSet ophaal dan is de nieuwe record nog niet toegevoegd, tenzij ik een paar seconden wacht. Het blijkt dus dat de code doorgaat zonder te wachten voordat de nieuwe record echt is toegevoegd.

Ik heb de ExecuteOptions property niet gewijzigd waardoor het dus een synchrone commando zou moeten zijn lijkt mij. Overigens heb ik wel andere combinaties geprobeerd, maar dit hielp helaas niet. Momenteel los ik dit dus op door extra check code (wat trouwens af en toe erg langzaam is, of ligt dit gewoon aan ADO?), maar ik heb liever dat dit automatisch gebeurd (zoals in VB of Delphi met de BDE).

Weet iemand toevallig hoe ik dit probleem op kan lossen?
Alvast bedankt!

Los Bastardos

  • VisionMaster
  • Registratie: Juni 2001
  • Laatst online: 18-07 20:32

VisionMaster

Security!

Op woensdag 03 oktober 2001 22:40 schreef Los_Bastardos het volgende:
Sinds ik ADO gebruik om Access databases te benaderen is er één probleem dat ik nog steeds niet heb opgelost. Het betreft de Execute() procedure in het TADOCommand component. Als ik deze gebruik om een insert query uit te voeren en daarna weer de data met de TADODataSet ophaal dan is de nieuwe record nog niet toegevoegd, tenzij ik een paar seconden wacht. Het blijkt dus dat de code doorgaat zonder te wachten voordat de nieuwe record echt is toegevoegd.

Ik heb de ExecuteOptions property niet gewijzigd waardoor het dus een synchrone commando zou moeten zijn lijkt mij. Overigens heb ik wel andere combinaties geprobeerd, maar dit hielp helaas niet. Momenteel los ik dit dus op door extra check code (wat trouwens af en toe erg langzaam is, of ligt dit gewoon aan ADO?), maar ik heb liever dat dit automatisch gebeurd (zoals in VB of Delphi met de BDE).

Weet iemand toevallig hoe ik dit probleem op kan lossen?
Alvast bedankt!

Los Bastardos
Waarom moeilijk doen met een Command Component.

Je kan je SQL commands ook in een TADOQuery kwijt.
Simpelweg SQL.Text aanpassen in een Update Insert of what ever en je kan dan de method .ExecSQL aanroepen in het component. Dit is een directe link naar de DB.
Dus geen open en close op dit component doen als je een insert doet, veel succes.

I've visited the Mothership @ Cupertino


  • jopiek
  • Registratie: September 2000
  • Laatst online: 19:56

jopiek

Tja... 'ns ff denken.

Mijn dringende advies:

gebruik GEEN delphi ADO componenten voor MS Access DB's, die zijn zeer brak (in ieder geval D5) ik heb m'n afstudeer project bijna verknald door de rare fouten die je met die comps krijgt...

Een goed alternatief dat perfect werkt (ook voor andere zaken) KaDaoDatabase componenten (freeware met source, stabiel en goed)

hier zijn ze te vinden: http://www.delphi.pari.bg/

Cogito Ergo Credo


Verwijderd

Topicstarter
Op donderdag 04 oktober 2001 01:10 schreef VisionMaster het volgende:

[..]

Waarom moeilijk doen met een Command Component.

Je kan je SQL commands ook in een TADOQuery kwijt.
Simpelweg SQL.Text aanpassen in een Update Insert of what ever en je kan dan de method .ExecSQL aanroepen in het component. Dit is een directe link naar de DB.
Dus geen open en close op dit component doen als je een insert doet, veel succes.
Bedankt voor je hulp VisionMaster, maar helaas heb ik er nog steeds last van als ik het TADOQuery object gebruik :(

Verwijderd

Topicstarter
Op donderdag 04 oktober 2001 08:04 schreef jopiek het volgende:
Mijn dringende advies:

gebruik GEEN delphi ADO componenten voor MS Access DB's, die zijn zeer brak (in ieder geval D5) ik heb m'n afstudeer project bijna verknald door de rare fouten die je met die comps krijgt...

Een goed alternatief dat perfect werkt (ook voor andere zaken) KaDaoDatabase componenten (freeware met source, stabiel en goed)

hier zijn ze te vinden: http://www.delphi.pari.bg/
Bedankt Jopiek.
Het project waar ik nu aan werk zal ik iig toch met de Delphi Ado componenten moeten afmaken, maar voor het volgende project zal ik zeker kijken of ik een andere component kan gebruiken.

Verwijderd

Kick!

Ik heb hier dus ook last van! Ik voer met ADOCommand een SELECT INTO uit en laat daar een Crystal Report op los. Vaak is dat rapportje leeg en na een (paar) keer Refresh wordt het rapport gevuld. Al een paar keer mijn hoofd gebroken tot ik zojuist even een ADOTable opende en de recordcount opvroeg. 0 Records dus. FF wachten en dan kreeg ik wel het juiste aantal records.
Oftewel, klinkt als probleem van TS.
Ik gebruik D6 Pro ( dus niet D5 als TS ) met ook een Access DB.
Is er al fix bekend? Een 3d party component gebruiken ipv de Delphi ADO componenten is niet echt haalbaar.

Het lijkt erop dat de Execute method ASync werkt ipv synchroon.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 14:22

Tomatoman

Fulltime prutser

Mogelijk ligt dit niet zozeer aan ADO als wel aan de manier waarop de database wijzigingen flusht. Je kunt proberen of het veranderen van de TransIsolation level van de TDatabase wat uitmaakt. Voor Access moet die op tiDirtyRead staan en niet op tiReadCommitted.

Een goede grap mag vrienden kosten.


Verwijderd

Helaas. Ik neem trouwens aan dat je ADOConnection bedoelt ipv TDatabase.
Geen effect toen ik IsolationLevel op ilReadUncommited zette.
Volgens de ADOConnection.State is die stOpen direct na de Execute, en niet stExecuting zoals ik zou verwachten.

Verwijderd

Voor de volledigheid zal ik ook maar mijn 'oplossing' posten.
Direct na mijn ADOCommand.Execute; geef ik de volgende 2 commando's mee:

ADOCommand.Connection.Close;
ADOCommand.Connection.Open;

De oplossing is dus even simpel als lelijk. Ik trap gewoon de connectie dicht om een flush te forceren en open de connectie weer.
Dit lijkt de oplossing te zijn voor mijn probleem.

Verwijderd

Kun je niet iets doen met requery?
Pagina: 1