Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi EXECSQL und Next (https://www.delphipraxis.net/115935-execsql-und-next.html)

Cosamia 20. Jun 2008 08:17

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

EXECSQL und Next
 
Hallo zusammen,

ich habe ein Problem im ExecSql und einem folgenden AdoQuery.next.
Fehler Meldung : Operation bei geschlossener Datenmenge nicht möglich.

Bei einem vorgelagerten AdoQuery.open bekäme ich die Fehlermeldung ""Der aktuelle Provider unterstützt nicht die Wiedergabe mehrfacher Recordsets bei einer einzelnen Ausführung"

Ich will nach dem ersten Datensatz in der Query den nächsten verarbeiten, und dies gelingt mir einfach nicht.

Jemand ne Idee?

Danke.

Delphi-Quellcode:
{Query nach Countabfrage neu füllen}
    adoquerydruck.active:=false;
    adoquerydruck.sql.Clear;
    adoquerydruck.sql.text := 'SELECT * FROM qryDruck';
    adoquerydruck.Open;
    adoquerydruck.First;

   
    While Not ADOQuerydruck.Eof do
       begin

    {Typ 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',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}
    adoquerydruck.Active := true;
    adoquerydruck.sql.Clear;
    adoquerydruck.sql.text := 'insert into tempdruck ('+printfields+') SELECT '+printfields+' FROM qryDruck where zahl ='+inttostr(selectedid);
    adoquerydruck.ExecSQL;
    adoquerydruck.Next; //Da kracht es !!
        end;

soulies 20. Jun 2008 08:27

Re: EXECSQL und Next
 
Zitat:

adoquerydruck.sql.text := 'insert into tempdruck ('+printfields+') SELECT '+printfields+' FROM qryDruck where zahl ='+inttostr(selectedid);
adoquerydruck.ExecSQL;
adoquerydruck.Next; //Da kracht es !!
das INSERT wird doch nur einmal ausgeführt -
wozu das 'next' - das wäre doch nur bei einem SELECT nötig

DeddyH 20. Jun 2008 08:28

Re: EXECSQL und Next
 
Erstelle eine 2. Query für die Datenmanipulation.

Cosamia 20. Jun 2008 08:44

Re: EXECSQL und Next
 
Zitat:

Zitat von soulies
Zitat:

adoquerydruck.sql.text := 'insert into tempdruck ('+printfields+') SELECT '+printfields+' FROM qryDruck where zahl ='+inttostr(selectedid);
adoquerydruck.ExecSQL;
adoquerydruck.Next; //Da kracht es !!
das INSERT wird doch nur einmal ausgeführt -
wozu das 'next' - das wäre doch nur bei einem SELECT nötig

Da ich oben den QueryCount zähle, soll ja eben INSERT nicht nur einmal vollzogen werden.

Cosamia 20. Jun 2008 08:44

Re: EXECSQL und Next
 
Zitat:

Zitat von DeddyH
Erstelle eine 2. Query für die Datenmanipulation.

Danke. Das werde ich gleich mal testen.

Cosamia 20. Jun 2008 09:25

Re: EXECSQL und Next
 
Entweder habe ich etwas falsch gemacht, oder die Problematik bleibt die selbige.

Bei einem AdoQuery.open kommt : "Der aktuelle Provider unterstützt nicht die Wiedergabe mehrfacher Recordsets bei einer einzelnen Ausführung

Bei einem AdoQuery.next : "Operation bei geschlossener Datenmenge nicht ausführbar"

DeddyH 20. Jun 2008 09:35

Re: EXECSQL und Next
 
Wie sieht der Quelltext aus?

Cosamia 20. Jun 2008 09:37

Re: EXECSQL und Next
 
Delphi-Quellcode:
 {Query nach Countabfrage neu füllen}
    adoquerydruck.active:=false;
    adoquerydruck.sql.Clear;
    adoquerydruck.sql.text := 'SELECT * FROM qryDruck';
    adoquerydruck.Open;


    //for I := 0 to quanta - 1 do begin {Die Anzahl der Bestellungen durchlaufen}

    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',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.Active := true;
    adoquerytemp.sql.Clear;
    adoquerytemp.sql.text := 'insert into tempdruck ('+printfields+') SELECT '+printfields+' FROM qryDruck where zahl ='+inttostr(selectedid);
    adoquerytemp.ExecSQL;
   adoquerytemp.Next;
        end; {For I}

mquadrat 20. Jun 2008 09:40

Re: EXECSQL und Next
 
Statt

Delphi-Quellcode:
adoquerytemp.Next;
meinst du glaub ich

Delphi-Quellcode:
adoquerydruck.Next;
Schließlich willst du durch deine Suchschleife laufen...

DeddyH 20. Jun 2008 09:44

Re: EXECSQL und Next
 
Außerdem wäre es evtl. sinnvoller, mit SQL_Parametern zu arbeiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.
Seite 1 von 3  1 23      

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