Hallo,
folgendes Problem: ich habe eine Sqlite-Datenbank, auf die ich mit einer ZConnection zugreife. Die Abfragen mache ich mit ZQuery, die Ergebnisse davon stecken in einer TDatasource-Komponente.
Nun habe ich das DBGrid auf meinem Formular durch ein StringGrid ersetzt, da zu viele Formatierungen der Datenbankfelder durchgeführt werden müssen und ich generell mehr Kontrolle über den Inhalt habe. Die TDatasource-Kompo benötige ich nun eigentlich nicht mehr, oder?
Mein eigentliches Problem: ich möchte bei Bedarf ein neues Feld in der Datenbank anlegen und dieses per Grid editieren.
Das Anlagen habe ich so gelöst:
Delphi-Quellcode:
if NOT ColumnExists(ZQuery1, 'newField', 'myTable') then begin
ZQuery1.Close;
ZQuery1.SQL.Text := 'ALTER TABLE "myTable" ADD COLUMN "newField" TEXT';
ZQuery1.ExecSQL;
end;
Das funktioniert auch problemlos. Nun möchte ich aber anschließend direkt den neuen Inhalt in das Feld "newField" schreiben. Versuch:
Delphi-Quellcode:
if NOT ZConnection1.Connected then exit;
ZQuery1.SQL.Text := 'SELECT newField FROM "myTable";';
ZQuery1.Active := true;
ZQuery1.CachedUpdates := True;
ZQuery1.First;
ZQuery1.Edit;
ZQuery1.FieldByName('newField').AsString := StringGrid1.Cells[ACol, ARow];
ZQuery1.Post;
Ich bekomme keine Fehlermeldung, aber die Daten werden auch nicht übernommen. ZConnection hat die Eigenschaft Readonly = False, ZQuery ebenso.
Habe ich was übersehen?