Hallo zusammen,
ich teste gerade die UniDAC-Komponenten (wir möchten unsere firmeninterne Applikation (Kommandozeilenprogramm) als Stand-alone exe ohne zusätzliche
DLL ausliefern).
Der erste Test besteht darin, einen Datensatz einzulesen, ein paar Felder abzuändern und wieder zurückzuschreiben.
Ich habe das so gemacht (die try/except-Blöcke habe ich hier weggelassen):
Delphi-Quellcode:
uniConn := TUniConnection.Create(nil);
uniQuery := TUniQuery.Create(nil);
try
// Datenbankverbindung
uniConn.Server := dbHost;
uniConn.Port := 3306;
uniConn.Username := dbUser;
uniConn.Password := dbPassword;
uniConn.Database := dbName;
uniConn.ProviderName := TMySQLUniProvider.GetProviderName;
uniConn.Open;
// Abfrage
uniQuery.Connection := uniConn;
uniQuery.SQL.Text := Format('SELECT * FROM %s WHERE hostname=''%s''',[dbTable, ComputerName]);
uniQuery.Open; // Datenbankabfrage durchführen
uniQuery.First; // und auf erstem Datensatz positionieren
if not uniQuery.Eof then begin
stUser := uniQuery.FieldByName('username').AsString;
expDate := uniQuery.FieldByName('reset_date').AsDateTime;
// Felder aktualisieren
uniQuery.Edit;
uniQuery.FieldByName('last_update').AsDateTime := Now;
uniQuery.Post;
end;
uniQuery.Close;
finally
uniConn.Free;
uniQuery.Free;
end;
Beim "uniQuery.Post" gibt's dann eine
Exception (Fehler in
SQL-Statement near "index=3234").
"index" ist ein AutoIncrement-Feld in der Tabelle und kann natürlich nicht geschrieben werden.
Fragen:
- Stimmt meine Vorgehensweise prinzipiell mit Edit/Post?
- Wie kann man das zum Server geschickte
SQL-Statement überprüfen?
- Was ist zu tun bzgl. des Fehlers mit "index"? Kann das Feld vor dem Post entfernt werden?
Ich weiß, dass es auch bei UniDAC ein Forum gibt - aber die Experten sind nun mal hier...
.sundance.