ZEOS 7 ändert alle Datensätze gleichzeitig
-
- Beiträge: 18
- Registriert: Fr 8. Mär 2013, 16:07
- OS, Lazarus, FPC: MINT 21, Laz: 2.2.0, FPC: 3.2.2
- CPU-Target: x64
- Wohnort: Hzgt. Lauenburg
ZEOS 7 ändert alle Datensätze gleichzeitig
Hallo zusammen!
Ich fange gerade an, mich mit ZEOS und SQLite3 zu befassen. Dazu habe ich eine Datenbank mit 1 Tabelle erstellt und ein kleines Projekt geschrieben. Die Neueingabe von Daten funktioniert einwandfrei. Wenn ich jedoch einen Datensatz ändere, werden alle anderen Datensätze ebenfalls geändert und ich bekomme eine dazu passende EZSQLException:
"... record(s) updated. Only 1 record should have been updated."
Bei ... steht dann die Anzahl der vorhandenen Datensätze.
Zum Ändern habe ich die Tabelle über den Navigator in den EDIT-Modus gesetzt und anschließend über den Navigator die Änderung gespeichert.
System:
Win7, Lazarus 1.04, ZEOS 7.03 Stable
Danke für Ideen und Hinweise
André
Ich fange gerade an, mich mit ZEOS und SQLite3 zu befassen. Dazu habe ich eine Datenbank mit 1 Tabelle erstellt und ein kleines Projekt geschrieben. Die Neueingabe von Daten funktioniert einwandfrei. Wenn ich jedoch einen Datensatz ändere, werden alle anderen Datensätze ebenfalls geändert und ich bekomme eine dazu passende EZSQLException:
"... record(s) updated. Only 1 record should have been updated."
Bei ... steht dann die Anzahl der vorhandenen Datensätze.
Zum Ändern habe ich die Tabelle über den Navigator in den EDIT-Modus gesetzt und anschließend über den Navigator die Änderung gespeichert.
System:
Win7, Lazarus 1.04, ZEOS 7.03 Stable
Danke für Ideen und Hinweise
André
Ein Mensch meint gläubig wie ein Kind, dass alle Menschen Menschen sind. (Eugen Roth)
Re: ZEOS 7 ändert alle Datensätze gleichzeitig
... wenn Du uns hier das SQl-Statement nicht verraten möchtest, wird man kaum helfen können.
Aliobaba
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: ZEOS 7 ändert alle Datensätze gleichzeitig
Vermutlich hast Du ein TZUpdateSQL verwendet und dort einen falschen SQL Script drin.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 18
- Registriert: Fr 8. Mär 2013, 16:07
- OS, Lazarus, FPC: MINT 21, Laz: 2.2.0, FPC: 3.2.2
- CPU-Target: x64
- Wohnort: Hzgt. Lauenburg
Re: ZEOS 7 ändert alle Datensätze gleichzeitig
Hallo Aliobaba!
Vielleicht war ich zu blauäugig. Ich habe früher mit D6Pro und der BDE gearbeitet. Im ZEOS-Projekt habe ich gelesen, daß man versucht die BDE nachzubauen. Dementsprechend habe keine SQL-Anweisungen eingebaut. Ich war davon ausgegangen, daß die Grundfunktionen "Einfügen", "Löschen" und "Ändern" ausschließlich über den Code des Navigator gesteuert werden. Wie bereits gesagt, die beiden ersten Funktionen funzen auch. Lediglich das Ändern haut nicht hin,
Gruß André
Vielleicht war ich zu blauäugig. Ich habe früher mit D6Pro und der BDE gearbeitet. Im ZEOS-Projekt habe ich gelesen, daß man versucht die BDE nachzubauen. Dementsprechend habe keine SQL-Anweisungen eingebaut. Ich war davon ausgegangen, daß die Grundfunktionen "Einfügen", "Löschen" und "Ändern" ausschließlich über den Code des Navigator gesteuert werden. Wie bereits gesagt, die beiden ersten Funktionen funzen auch. Lediglich das Ändern haut nicht hin,

Gruß André
Ein Mensch meint gläubig wie ein Kind, dass alle Menschen Menschen sind. (Eugen Roth)
Re: ZEOS 7 ändert alle Datensätze gleichzeitig
doch, das funktioniert schon, dein Fehler liegt wo anders,Andrewi hat geschrieben:ie beiden ersten Funktionen funzen auch. Lediglich das Ändern haut nicht hin,
Aber aufgrund deiner vagen Beschreibung kann man dir wohl nicht helfen

hde
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: ZEOS 7 ändert alle Datensätze gleichzeitig
Wenn Du eine Tabelle hast, in der alle Zeilen die gleichen Daten drin haben:
Feld1 | Feld2
hhh | jjj
hhh | jjj
hhh | jjj
Und Du willst jetzt eine Zeile ändern, dann geht das nicht!
Denn ein UPDATE hat immer ein WHERE mit Feld1="hhh" AND Feld2="jjj". Somit werden immer alle Zeilen geändert die dem WHERE entsprechen.
Abhilfe: Mache in die Tabelle ein Feld "ID" vom Typ AutoIncrement (INTEGER PRIMARY KEY), dann steht dort immer eine eindeutige Zahl drin und der UPDATE kann per WHERE exakt diese eine Datenzeile ansprechen.
Feld1 | Feld2
hhh | jjj
hhh | jjj
hhh | jjj
Und Du willst jetzt eine Zeile ändern, dann geht das nicht!
Denn ein UPDATE hat immer ein WHERE mit Feld1="hhh" AND Feld2="jjj". Somit werden immer alle Zeilen geändert die dem WHERE entsprechen.
Abhilfe: Mache in die Tabelle ein Feld "ID" vom Typ AutoIncrement (INTEGER PRIMARY KEY), dann steht dort immer eine eindeutige Zahl drin und der UPDATE kann per WHERE exakt diese eine Datenzeile ansprechen.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 18
- Registriert: Fr 8. Mär 2013, 16:07
- OS, Lazarus, FPC: MINT 21, Laz: 2.2.0, FPC: 3.2.2
- CPU-Target: x64
- Wohnort: Hzgt. Lauenburg
Re: ZEOS 7 ändert alle Datensätze gleichzeitig
Hallo MmVisual!
Ein ID-Feld war vorhanden, alledings hatte ich dort nur PRIMARY KEY und nicht INTEGER PRIMARY KEY eingestellt. Nachdem ich das geändert hatte fuzte es.
Allerdings habe ich trotzdem ein Verständnisproblem. Die Datensätze hatten zwar alle in ID ein leeres Feld, aber die restlichen Felder hatten unterschiedliche Einträge. Heißt das im Umkehrschluß, daß nur das erste Feld auf Unterschiede abgeprüft wird, denn nach deiner Beschreibung würden ja alle Felder in der WHERE-Klausel überprüft und UPDATE hätte dann trotzdem den geänderten DS eindeutig finden müssen.
Grüße und vielen Dank für eure Hilfe
André
Ein ID-Feld war vorhanden, alledings hatte ich dort nur PRIMARY KEY und nicht INTEGER PRIMARY KEY eingestellt. Nachdem ich das geändert hatte fuzte es.
Allerdings habe ich trotzdem ein Verständnisproblem. Die Datensätze hatten zwar alle in ID ein leeres Feld, aber die restlichen Felder hatten unterschiedliche Einträge. Heißt das im Umkehrschluß, daß nur das erste Feld auf Unterschiede abgeprüft wird, denn nach deiner Beschreibung würden ja alle Felder in der WHERE-Klausel überprüft und UPDATE hätte dann trotzdem den geänderten DS eindeutig finden müssen.
Grüße und vielen Dank für eure Hilfe
André
Ein Mensch meint gläubig wie ein Kind, dass alle Menschen Menschen sind. (Eugen Roth)
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: ZEOS 7 ändert alle Datensätze gleichzeitig
Es wird nur der primäre Key verwendet. Aus diesem Gründe sollte es Unique sein und sinnvoller weise Not Null. Ob die Restlichen Felder unterschiedlich sind oder nicht ist uninteressant. Der Key kann auch zusammengesetzt sein. Nur erwarte von der Automatik für die Erstellung der Statements keine Heldentaten. Wenn du es komplexer willst, dann musst du die Update, delete,... Selbst sinnvoll erstellen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: ZEOS 7 ändert alle Datensätze gleichzeitig
Dafür gibt es TZUpdateSQLaf0815 hat geschrieben:Wenn du es komplexer willst, dann musst du die Update, delete,... Selbst sinnvoll erstellen.
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: ZEOS 7 ändert alle Datensätze gleichzeitig
mMn nicht gnaz richtig. Wozu gibt es das Property WhereMode?
hde
hde
-
- Beiträge: 18
- Registriert: Fr 8. Mär 2013, 16:07
- OS, Lazarus, FPC: MINT 21, Laz: 2.2.0, FPC: 3.2.2
- CPU-Target: x64
- Wohnort: Hzgt. Lauenburg
Re: ZEOS 7 ändert alle Datensätze gleichzeitig
Hallo zusammen!
Jetzt habe ich es auch verstanden. Nochmals vielen Dank für eure Hilfe!
Grüße André
Jetzt habe ich es auch verstanden. Nochmals vielen Dank für eure Hilfe!

Grüße André
Ein Mensch meint gläubig wie ein Kind, dass alle Menschen Menschen sind. (Eugen Roth)