Hallo,
die Werte werden zwar korrekt abgespeichert, aber die ID wird immernoch um eins erhöht.
Das mit dem Label funktioniert durchaus, weil der ExecSQL-Befehl, der die ID (leider) ändert, erst nach dem Zusammenstellen des
SQL-Strings erfolgt. Im Formular gibt es keine datensensitiven Komponenten mehr, das einzige TTable-Element, das auf diese Tabelle verweist, ist nicht aktiv.
Beispiel:
Delphi-Quellcode:
if dmGeneral.tblSD_Cust.Active
then
dmGeneral.tblSD_Cust.Close;
with dmQueries.qryUpdate
do begin
SQL.Text := '
UPDATE SD_CUST SET ' +
'
STRSHORTNAME = ' + QuotedStr(edtShortName.Text) + '
, ' +
'
STRNAME1 = ' + QuotedStr(edtName1.Text) + '
' +
'
WHERE ID = ' + lblID.Caption + '
;';
try
showmessage(
SQL.Text);
ExecSQL;
except
On E:
Exception do begin
strMsg := '
Fehler bei Aktualisieren Datensatz, Meldung: ' + E.
Message;
Beep;
MessageDlg(strMsg, mtError, [mbOK], 0);
Exit;
end;
end;
end;
Wenn die aktuelle Datensatz-ID z. B. 122 ist, zeigt der Showmessage-Befehl "...WHERE ID = 122;", was ja korrekt ist.
Wenn ich nach dem ExecSQL in die Tabelle schaue, steht im Feld ID des gleichen Datensatzes (es wird kein neuer angefügt) eine 123 drin....und ich habe keine Ahnung, wieso
Edit: Hab jetzt mal ein kleines Testprojekt angelegt, dass genau das gleiche tut und siehe da, das Feld "ID" wird nicht verändert, also muss noch irgendwo im Programm der Wurm sein, aber wenn ich mit F7 durchgehe, kommt nach dem ExecSQL direkt die nächste Anweisung, aber da ist der Wert schon verändert...
Gruß
Frank
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty