![]() |
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. |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Nachtrag:
Es werden jedoch damit alle Datensätze kopiert. Das muss ich Dir ja lassen. Ist eine sehr elegante Variante. Danke |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Post doch einfach mal die gesamte Felderdefinitionen (mit Primary-Keys etc.) Deiner beiden Tabellen. Eventuell können wir daraus was erkennen...
|
Re: Schleife nimmt ersten und letzten Datensatz nicht
Wie kann ich denn die Felderdefinitionen posten?? Sorry!!
Es scheint wohl so zu sein, dass er nach dem Ausführen das erste Feld aus der Tabelle Ausgaben nicht mehr findet. |
Re: Schleife nimmt ersten und letzten Datensatz nicht
SQL-Code:
...und die Zeilen abschreiben (oder Screenshot machen und anhängen)
show columns from tabellenname;
|
Re: Schleife nimmt ersten und letzten Datensatz nicht
sag mal, hast du den tippfehler im statement berichtigt?
|
Re: Schleife nimmt ersten und letzten Datensatz nicht
Delphi-Quellcode:
hab gesehen, die feldnamen stimmen nicht überein.
Kassenbuch.ExecSQL('delete from kassenbuch');
// filtern Ausgaben.active := false; Ausgaben.SQL.Clear; Ausgaben.SQL.Add('insert into kassenbuch (datum, zurgnr, betrag, betreff) 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
Liste der Anhänge anzeigen (Anzahl: 1)
Tippfehler habe ich berichtigt.
ANbei der Screenshot. |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Bevor ich jetzt allen gute N8 wünsche, hier ist mir noch was aufgefallen. Es wird schon stimmen (der 1. Datensatz wird ja kopiert), aber evtl. ist es ja das Problem:
Delphi-Quellcode:
... Du schreibst einmal "betreff" und einmal "vermerk".
Kassenbuch.FieldbyName('betreff').asString := Ausgaben.FieldbyName('vermerk').asString;
Liebe Grüße und gute N8 - bis morgen. |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Zitat:
SCRaT |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Naja .... ich kann mir nicht wirklich vorstellen, dass die Feldnamen da irgendwas mit zu tun haben. Dürfte der DB doch eigentlich egal sein, von welchem Feld in welches kopiert wird.
N8 und Danke. Bis morgen. |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Ein letzter Nachtrag noch.
Die Fehlermeldung, dass das Feld ID in Ausgaben nicht gefunden wurde taucht genau dann auf, wenn der Befehl "active := True" ausgeführt wird. Nochmals danke und ich hoffe, dass mir oder Euch morgen was einfällt den Fehler zu beheben. Viele Grüße |
Re: Schleife nimmt ersten und letzten Datensatz nicht
Hmmm, basiert Deine Zieltabelle eigentlich auch auf einem Query oder zeigt das DataSource hier auf eine Tabelle. Nimm doch statt dem Query (select * from tabllenname) mal eine Tabellenkomponente und verknüpfe das (Quell)Datasource damit. Warum der umweg über das Query wenn sowieso alle Datensätze angezeigt werden? Versuch es also mal OHNE Query sondern NUR über Tabellen und gib bescheid :-)
SCRaT |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 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