Entwickler-Ecke

Datenbanken - Findnext funktioniert nicht mit Delete...


cyberax - Mo 28.05.07 11:52
Titel: Findnext funktioniert nicht mit Delete...
Hallo,

folgende Anweisung...


SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
 if ZQuery_rechnung_art.RecordCount=0 then exit;
 if messagedlg('Sollen wirklich alle Artikel dieser Rechnung gelöscht werden ?',mtWarning,[mbyes,mbno],0)=mryes then begin
  ZQuery_rechnung_art.first;
  repeat
 {Artikelbestand aktualisieren}
   with form13.Query_artikel do begin
    sql.text:='UPDATE artikel SET lagerbestand = lagerbestand + :wertbestand where barcode = :wertbarcode';
    parambyname('wertbestand').value:=ZQuery_rechnung_art.fieldbyname('menge').Value;
    parambyname('wertbarcode').value:=ZQuery_rechnung_art.fieldbyname('artikelnummer').value;
    execsql;
   end;
   ZQuery_rechnung_art.delete;
  until ZQuery_rechnung_art.findnext=false;
 end;
end;


funktioniert leider nicht. D.h., wenn der Recordcount bei z.B. 2 liegt wird bei Findnext immer ein False geliefert.

Wo liegt mein Fehler ?? Gibt es generell eine bessere Möglichkeit solche Routinen zu beschleunigen?

Gruß cyberax


MarkusB - Mo 28.05.07 14:18

Moin Cyberax!

Vorschlag:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
if ZQuery_rechnung_art.RecordCount=0 then exit;  
 if messagedlg('Sollen wirklich alle Artikel dieser Rechnung gelöscht werden ?',mtWarning,[mbyes,mbno],0)=mryes then begin  
  ZQuery_rechnung_art.first;
  repeat  
 {Artikelbestand aktualisieren}  
   with form13.Query_artikel do begin  
    sql.text:='UPDATE artikel SET lagerbestand = lagerbestand + :wertbestand where barcode = :wertbarcode';  
    parambyname('wertbestand').value:=ZQuery_rechnung_art.fieldbyname('menge').Value;  
    parambyname('wertbarcode').value:=ZQuery_rechnung_art.fieldbyname('artikelnummer').value;  
    execsql;  
   end;  
   ZQuery_rechnung_art.delete;  
   ZQuery_rechnung_art.first;              <- Änderung
  until ZQuery_rechnung_art.eof;           <- Änderung
 end;  
end;


Es kann sein, dass das "ZQuery_rechnung_art.first;" nach dem "ZQuery_rechnung_art.delete;" nicht nötig ist. Vorrausetzung: der RecordZeiger wird nach dem Delete automatisch aktualisiert.

Viele Grüße
Markus


cyberax - Mi 30.05.07 17:14

Hi markus,

sorry, dass ich jetzt erst antworte. :oops:
So funktionierts! Vielen Dank!