![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: lokal
Schleife nimmt ersten und letzten Datensatz nicht
Hallo zusammen,
bräuchte mal kurz Eure Hilfe. Bei folgender Schleife wird der erste und letzte Datensatz leider nicht kopiert und ich weiß wirklich nicht warum. Könnt Ihr helfen? Der Code ist:
Delphi-Quellcode:
Ausgaben.First;
while not Ausgaben.Eof do begin Kassenbuch.Append; Kassenbuch.Edit; Kassenbuch.FieldbyName('datum').asVariant := Ausgaben.FieldbyName('datum').asVariant; Kassenbuch.FieldbyName('zurgnr').asInteger := Ausgaben.FieldbyName('zurgnr').asInteger; Kassenbuch.FieldbyName('betrag').asVariant := Ausgaben.FieldbyName('betrag').asVariant * -1; Kassenbuch.FieldbyName('betreff').asString := Ausgaben.FieldbyName('vermerk').asString; Ausgaben.Next end; Kassenbuch.Post; |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Zitat:
versuchs mal mit:
Delphi-Quellcode:
Ausgaben.First;
while not Ausgaben.Eof do begin Kassenbuch.Append; Kassenbuch.FieldbyName('datum').asVariant := Ausgaben.FieldbyName('datum').asVariant; Kassenbuch.FieldbyName('zurgnr').asInteger := Ausgaben.FieldbyName('zurgnr').asInteger; Kassenbuch.FieldbyName('betrag').asVariant := Ausgaben.FieldbyName('betrag').asVariant * -1; Kassenbuch.FieldbyName('betreff').asString := Ausgaben.FieldbyName('vermerk').asString; Kassenbuch.Post; Ausgaben.Next end; |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Zitat:
Delphi-Quellcode:
//EDIT: Wo war der Rote Kasten?!?!
Ausgaben.First;
while not Ausgaben.Eof do begin Kassenbuch.Append; Kassenbuch.Edit; Kassenbuch.FieldbyName('datum').asVariant := Ausgaben.FieldbyName('datum').asVariant; Kassenbuch.FieldbyName('zurgnr').asInteger := Ausgaben.FieldbyName('zurgnr').asInteger; Kassenbuch.FieldbyName('betrag').asVariant := Ausgaben.FieldbyName('betrag').asVariant * -1; Kassenbuch.FieldbyName('betreff').asString := Ausgaben.FieldbyName('vermerk').asString; Kassenbuch.Post; Ausgaben.Next end; Zitat:
|
Re: Schleife nimmt ersten und letzten Datensatz nicht
Hallo,
erstmal danke für die schnellen Antworten. Aber leider ändert sich nichts. Es wird lediglich der erste Datensatz kopiert. Mehr nicht. |
Re: Schleife nimmt ersten und letzten Datensatz nicht
In der Tabelle AUSGABEN sind drei Datensätze drin.
Der gesamte Code lautet:
Delphi-Quellcode:
Und wenn dieses Ereignis ausgeführt wird, wird lediglich der erste Datensatz aus der DB AUSGABEN kopiert. Die beiden nächsten nicht mehr.
Kassenbuch.ExecSQL('delete from kassenbuch');
// filtern Ausgaben.active := false; Ausgaben.SQL.Clear; Ausgaben.SQL.Add('select * from ausgaben'); Ausgaben.active := True; // Ausgaben ermitteln Ausgaben.First; while not Ausgaben.Eof do begin Kassenbuch.Append; Kassenbuch.FieldbyName('datum').asVariant := Ausgaben.FieldbyName('datum').asVariant; Kassenbuch.FieldbyName('zurgnr').asInteger := Ausgaben.FieldbyName('zurgnr').asInteger; Kassenbuch.FieldbyName('betrag').asVariant := Ausgaben.FieldbyName('betrag').asVariant * -1; Kassenbuch.FieldbyName('betreff').asString := Ausgaben.FieldbyName('vermerk').asString; Kassenbuch.Post; Ausgaben.Next; end; Kassenbuch.Refresh; showMessage('Das Kassenbuch wurde erfolgreich erstellt'); Merkwürdiger Weise biegt der beim 2. oder 3. mal auslösen des Ereignises in eine endlos Schleife ein und kopiert den zweiten Datensatz immer und immer wieder ... macht keinen Sinn in meinen Augen. Und ich steh langsam wirklich auf dem Schlauch, wo mein Denkfehler ist. Nochmals danke für Eure Hilfe. |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Zitat:
Laß Dir mal in einer Schleife die Datensätze z.B. mit Showmessage von der Ausgangstabelle anzeigen und schau, ob alle durchlaufen werden:
Delphi-Quellcode:
Eine andere Idee wäre z.B. eine (bei den Felddefinitionen eingestellte) Beschränkung in MySQL, die nur den 1. Datensatz akzeptiert. Schau mal, ob sich die Daten von den anderen (leere Felder?) unterscheiden. Der Source müsste nämlich laufen :angel:
Ausgaben.First;
while not Ausgaben.Eof do begin Showmessage(Ausgaben.FieldbyName('vermerk').asString); Ausgaben.Next end; SCRaT |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Hi,
habe das ShowMessage Ereignis gerade eingebaut und er durchläuft alle drei Datensätze. Warum durfläuft er sie denn und kopiert sie bitte nicht? |
Re: Schleife nimmt ersten und letzten Datensatz nicht
wie wär's denn mit ...
Delphi-Quellcode:
PS: kann es sein, dass dein primary key nicht eindeutig ist?
Kassenbuch.ExecSQL('delete from kassenbuch');
// filtern Ausgaben.active := false; Ausgaben.SQL.Clear; Ausgaben.SQL.Add('insert into kassenbuch (datum, zurgnr, betrag, vermkerk) select datum, zurgnr, betrag * -1, vermerk from ausgaben'); Ausgaben.active := True; showMessage('Das Kassenbuch wurde erfolgreich erstellt'); |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Ich habe jetzt folgendes gemacht:
Ich habe Deine SHOWMESSAGE Variant voan gestelt. Anschließend meine Kopierzeilen angefügt. Es passiert folgendes: Showmessage 1. Datensatz 1. Datensatz wird kopiert Showmessage 2. Datensatz Es wird ein leeter Datensatz in der Tabelle Kassenbuch eingetragen. Der dritte Datensatz wird gar nicht mehr angezeigt und auch nicht kopiert. |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Zitat:
Wenn ich diese sehr elegante Variante auslösen will, kriege ich die Fehlermeldung, dass das Feld ID nicht gefunden wurde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz