Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADOQuery und Result (https://www.delphipraxis.net/116355-adoquery-und-result.html)

Cosamia 27. Jun 2008 10:47

Datenbank: Access • Version: 2003 • Zugriff über: ADO

ADOQuery und Result
 
Liefert mir die ADOQuery ein Ergeignis, wenn die AdoQuery einen SQL.TEXT erfolgreich ausgeführt hat?

mkinzler 27. Jun 2008 10:51

Re: ADOQuery und Result
 
Eher wenn nicht

shmia 27. Jun 2008 10:54

Re: ADOQuery und Result
 
Nein, es gibt eine Exception, wenn ein Problem aufgetreten ist.
Wenn du UPDATE, INSERT oder DELETE - Anweisungen absendest, dann sollte man keine TAdoQuery sondern TAdoCommand verwenden.
(habe da zwischen den Zeilen gelesen, dass du keine normalen SELECT-Anweisungen ausführen möchtest)

TAdoCommand.Execute ist mehrfach überladen und liefert in einigen Varianten die Anzahl der betroffenen Datensätze zurück.

Cosamia 27. Jun 2008 10:55

Re: ADOQuery und Result
 
Ich habe das Thema, dass ich eine Query mit einem SQL Statement befülle, und hinterher per Rave ausdrucke.

Jetzt stellt sich das Problem, dass ich nach dem Query.open das Ravemodul öffne, welches aber wohl schneller ist, als Query mit dem Ausführen des Statements.

Ein Delay einbauen, halte ich für Pfusch, oder?

Cosamia 27. Jun 2008 10:57

Re: ADOQuery und Result
 
Der Code sieht so aus:

Delphi-Quellcode:
 {AdoQuery mit allen Werten aus tempdruck füllen}
    adoquerydruck.sql.Clear;
    adoquerydruck.sql.text := 'SELECT * FROM tempdruck'; // Hier wird die Query für Rave befüllt.
    adoquerydruck.Open;




    {Alle Datensätze die aktiv sind im Grid anzeigen}
    adoquery1.Active := false;
    adoquery1.sql.Clear;
    adoquery1.sql.text := 'SELECT * FROM best WHERE active = TRUE';
    adoquery1.Open;
    adoquery1.First;

   
    {Rave Formular aufrufen}
    RvProject1.Open;
    RvProject1.Execute;

shmia 27. Jun 2008 11:12

Re: ADOQuery und Result
 
Zitat:

Zitat von Cosamia
Jetzt stellt sich das Problem, dass ich nach dem Query.open das Ravemodul öffne, welches aber wohl schneller ist, als Query mit dem Ausführen des Statements.

Das kann nicht sein. Das Programm kann [TADOQuery.]Open erst verlassen, wenn alle Daten gelesen sind.
Bei CursorLocation = clUseServer werden zwar Daten nachgeladen während man durch die Datenmenge geht, das macht aber programmiertechnisch keinen Unterschied.
adoquery1.First kannst du weglassen; nach einem ausgeführten Open steht der aktuelle Datensatz immer auf dem 1. Satz.

Cosamia 27. Jun 2008 11:15

Re: ADOQuery und Result
 
Dann steckt das Problem woanders. Wenn ich mit mit F7 durch die einzelnen Schritte gehe, bringt Rave das gewünschte Ergebnis.

Beim normalen Programmdurchlauf leider nicht.

shmia 27. Jun 2008 11:52

Re: ADOQuery und Result
 
Zitat:

Zitat von Cosamia
Dann steckt das Problem woanders. Wenn ich mit mit F7 durch die einzelnen Schritte gehe, bringt Rave das gewünschte Ergebnis.
Beim normalen Programmdurchlauf leider nicht.

Dann setz doch mal einen sleep(5000) an strategisch wichtige Stellen und lass das Programm mit F9 rennen.

Also nach adoquerydruck.Open sollte keine Auswirkung haben.
Aber vor adoquerydruck.Open könnte ich mir einen Effekt vorstellen.
Arbeitest du mit vielleicht mit Access und befüllst die Tabelle "tempdruck" an anderer Stelle?

Cosamia 27. Jun 2008 11:53

Re: ADOQuery und Result
 
Ja, ich arbeite mit Access.

Die Tempdruck wird vorgelagert hier befüllt:

Delphi-Quellcode:
While Not ADOQuerydruck.Eof do
       begin

    {Linsentyp bestimmen}
    cltype := adoquerydruck.FieldByName('TYP').AsString;
    selectedid := adoquerydruck.FieldByName('Zahl').AsInteger;

    {Felder aus der INI lesen}
    IniFile := TIniFile.create(GetIniFilename);
        try
          clprintfields := IniFile.ReadString ('CLTYPES-PRINT',cltype,'');
        finally
          inifile.Free;
        end;
    {Printfields zusammensetzen / CL-Felder mit Stammdaten}
    Printfields := 'Name,Kundennummer,Strasse,Ort,PLZ,Fax,Telefon,EMail,Zahl,Kommission,'+clprintfields;

    {Felder aus der INI in ein SELECT bügeln / Stammdaten nicht vergessen}
    adoquerytemp.SQL.Clear;

    adoquerytemp.sql.text := 'insert into tempdruck ('+printfields+') SELECT '+printfields+' FROM qryDruck where zahl ='+inttostr(selectedid);
    adoquerytemp.ExecSQL;

    {nächsten Datensatz aus der Querydruck lutschen}
    adoquerydruck.Next;
        end; {For I}

Cosamia 27. Jun 2008 12:52

Re: ADOQuery und Result
 
unglaublich, aber leider wahr.

ein sleep (5000) funzt.
ein sleep (2000) scheint zu kurz, und ein sleep (3000) führt fast immer zum richtigen Ergebnis.

Ich habe es jetzt vor das Query.open gesetzt.

Kann mir jemand den Effekt erklären?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz