seit mehreren Tagen versuche ich nun schon Daten in einer SQLite DB zu ändern. Auch das durchforsten etlicher Foren und das ausprobieren mit etlichen Einstellungen brachte mich nicht weiter, deswegen wende ich mich jetzt an euch.
(Kurz zu meiner Person, ich habe währen eines Praxissemester schon mal mit Delphi7 gearbeitet, bin also kein blutiger Anfänger, aber sicherlich auch kein Profi.)
Aber hier mal die Details, folgendes habe ich:
- Lazarus 0.9.26 mit FPC 2.2.2
- Datamodul mit den Komponenten:
TSQLite3Connection, TSQLTransaction, TSQLQuery
TSQLTransaction ist mit TSQLite3Connection verbunden, TSQLQuery mit TSQLTransaction und TSQLite3Connection. - Form mit den Komponenten:
TDatasource, TDBGrid
TDatasource ist mit TSQLQuery verbunden und TDBGrid mit TDatasource
Das mache ich damit und was ist das Problem:
- Bei dem Ereignis OnFormShow stelle ich die Verbindung zu DB her.
- Nun lese ich einen Datensatz aus der DB ein, der wird im DBGrid angezeigt.
- Nun ändere ich diesen Datensatz, das habe ich so gemacht:
oder auch mit diesem statt dem .Post
Code: Alles auswählen
DM.SQLQuery1.Edit; DM.SQLQuery1.FieldByName('vok').AsString:='nicht das alte'; DM.SQLQuery1.Post;
oder auch so:Code: Alles auswählen
DM.SQLQuery1.ApplyUpdates;
usw. das Ergebnis ist immer das selbe, die Änderung ist im DBGrid zu sehen, auch wenn der Datensatz mit einem select-Befehl oder mit einem Refresh neu eingelesen wird, ist die Änderung noch da. Schaue ich allerdings mit einem SQLite-Manageprogramm auf die DB ist die Änderung dort nicht angekommen!?Code: Alles auswählen
DM.SQLQuery1.Close; DM.SQLQuery1.SQL.Clear; DM.SQLQuery1.SQL.Add('update fach set vok="nicht das alte" where id="1" '); DM.SQLQuery1.ExecSQL;
Und was mich jetzt noch ganz aus der Bahn wirft ist:
Ich habe das alles dann auch mal noch mit den Zeos-Komponenten gemacht. Damit funktioniert es ohne Probleme, die Änderungen werden auch wirklich übernommen. Leider soll das Programm später mal auf WIN CE laufen und das ist dann auch schon das Aus für die Zeos-Komponenten.
Hat vielleicht jemand eine Idee woran das liegen könnte, dass es mit den Komponenten von Lazarus nicht funktioniert, oder welche Einstellung ich ggf. noch übersehen habe?
Folgendes Punkte habe ich bereits „abgearbeitet“:
- Transaction.Action mit caCommit usw.
- Query.ReadOnly:=False
- Query.UpdateMode mit upWhereKeyOnly usw.
- Query.UsePrimaryAsKey:=True
- Die Query Ereignisse BeforeInsert usw. habe ich überprüft ob diese wirklich statt finden.
- Die Datensätze der DB besitzt natürlich einen PrimaryKey (AutoInt, Not Null).
- Meines Wissens kennt SQLite keine User-Verwaltung, muss daher keinen User angeben!?
Und für all diejenigen, die das hier vor dem 31.12. 23:59 lesen, einen guten Rutsch ins Jahr 2009!
Grüße
Mathias