Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Gelöst: Zeos, Stringgrid und Datasource: wie Feld bearbeiten? (https://www.delphipraxis.net/184223-geloest-zeos-stringgrid-und-datasource-wie-feld-bearbeiten.html)

ernschd 10. Mär 2015 08:46

Datenbank: Sqlite • Version: 3 • Zugriff über: Zeos

Gelöst: Zeos, Stringgrid und Datasource: wie Feld bearbeiten?
 
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?

baumina 10. Mär 2015 08:51

AW: Zeos, Stringgrid und Datasource: wie Feld bearbeiten?
 
Ich habe die Erfahrung gemacht, dass ein Update nicht funktioniert, wenn keine eindeutigen Felder selektiert wurden. Deswegen würde ich das select-Statement durch die eindeutige ID erweitern.

ernschd 10. Mär 2015 08:57

AW: Zeos, Stringgrid und Datasource: wie Feld bearbeiten?
 
Ja, normalerweise schon, aber die Tabelle enthält nur eine Zeile (ohne ID).

baumina 10. Mär 2015 09:02

AW: Zeos, Stringgrid und Datasource: wie Feld bearbeiten?
 
Interessante Konstellation für eine DB-Tabelle, x Spalten aber nur eine Zeile :gruebel:. Na egal, bleibt immer noch ein select *, das man hier einsetzen könnt.

ernschd 10. Mär 2015 09:11

AW: Zeos, Stringgrid und Datasource: wie Feld bearbeiten?
 
Ich habe mehrere Tabellen (z.B. Nutzer) mit mehreren Zeilen, und eben eine Tabelle mit Stammdaten, in denen nur eine Zeile enthalten ist. Wieso ist das eine interessante Konstellation?
Wobei das eigentlich egal ist, hat ja nichts mit meinem Problem zu tun.
Das Select * ändert auch nichts daran, dass die Werte nicht übernommen werden.

baumina 10. Mär 2015 09:22

AW: Zeos, Stringgrid und Datasource: wie Feld bearbeiten?
 
Normalerweise wird kein alter table gemacht, wenn ein Benutzer Daten erfasst, sondern eben ein Datensatz in eine DB-Tabelle eingefügt. Was beinhaltet denn diese Tabelle?

ernschd 10. Mär 2015 09:24

AW: Zeos, Stringgrid und Datasource: wie Feld bearbeiten?
 
Anzahl Nutzer, Adresse, Bemerkungen und solche allgemeinen Informationen (Stammdaten).

baumina 10. Mär 2015 09:26

AW: Zeos, Stringgrid und Datasource: wie Feld bearbeiten?
 
Aber zum Thema zurück. Wenn du CachedUpdates = true setzt, benötigst du nach dem post glaube ein ApplyUpdates um die Daten dann tatsächlich in die DB zu schreiben.

ernschd 10. Mär 2015 09:30

AW: Zeos, Stringgrid und Datasource: wie Feld bearbeiten?
 
Das war's! Wunderbar, danke :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz