Hallo Delphianer,
vielleicht kann mir einer von euch helfen.
Wenn ich beigefügte Prozedur laufen lassen, geht das genau
ein mal gut.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure Test; var i: integer; begin if qry = nil then begin qry := TADOQuery.Create(self); qry.Connection := ADOConnection1; end else qry.Close; qry.SQL.text := 'select * from test'; qry.Open; i := 0; while not qry.eof do try inc(i); qry.Edit; qry.FieldByName('Test2').AsInteger := i; qry.Post; finally qry.Next end; end |
Bei jedem weiteren Aufruf kommt die Fehlermeldung
Die zum Aktualisieren angegebene Zeile wurde nicht gefunden.
Einige Werte wurden seit dem letzten Lesen ggf. geändert.
Ich habe ein wenig rumexperimentiert und habe folgendes festgestellt.
Wenn ich in dem gleichen Programm auf die selbe Tabelle ein Update mache, in der Form
Delphi-Quelltext
1: 2:
| qry2.SQL.Text := 'update Test set Test2 = ' + IntToStr(i) + ' where idTest=' + qry.FieldByName('idTest').AsString; qry2.ExecSQL; |
kann ich den Datensatz wieder mit obiger Variante ändern, aber
nur diesen!
Auch ein neuer Start des Programmes ändert daran nichts, sobald ich einen Satz mit edit -- post geändert habe, bleibt dieser für weitere Manipulationen solange gesperrt, bis er mit einem SQL-Command wieder geändert wurde.
meine aktuelle config:
Windows XP
Delphi 2007
MySQL 5.1
Verbindung mit MySQL ODBC 5.1 Driver oder MySQL ODBC 3.51 Driver (beides probiert)
Die Tabelle Test hat zwei Felder sowie einen Primärschlüssel
Sie sieht wie folgt aus
SQL-Anweisung
1: 2: 3: 4: 5:
| CREATE TABLE `test`.`test` ( `idTest` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT, `Test2` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`idTest`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci ROW_FORMAT=FIXED; |
SQL-Anweisung
Ich weiß langsam nicht mehr, wo ich noch suchen soll, vielleicht hat ja einer von Euch eine Idee.
Schon mal ein Riesen Dankeschön vorab