SQlite3 Änderungen werden nicht übernommen / neues Notebook

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Meridian
Beiträge: 30
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von Meridian »

Hallo zusammen,

heute brauch mal wieder Hilfe.

Ich bin nur Hobby-Bastler und hab trotzdem schon ein paar schöne Tools mit Lazarus erstellt.

Vor 2 Wochen habe ich mir ein neues Notebook mit Windows 11 Home zugelegt, dann die Programme installiert und es gibt es unterschiedliche Verhaltensweisen zwischen alten und neuen Programmen auf dem neuen Notebook.
Das sich Windows auf dem Neuen grundsätzlich in einigen Dingen anders als auf dem Alten verhält, ist eine andere Sache. Das nur nebenbei erwähnt.

Es geht um darum, dass bei SQlite3 Datenbankprogrammen, die auf dem neuen Notebook erstellt werden, die Änderungen der Daten nicht in die Datenbank geschrieben werden! Obwohl ich anscheinend die gleichen Einstellungen zu älteren (auf dem alten Notebook erstellten) Progs anwende.
Bei Programmen, die ich auf dem Alten erstell habe, funktioniert es auch auf dem neuen Notebook. Bei Programm, die ich auf dem Neuen neu erstelle, verhält es sich anders und die Daten werden nicht übernommen 😊

Ich habe wirklich lange probiert, die Einstellungen zwischen alt und neu verglichen und ich weiß nicht, warum SQlite3 sich beim neuen Notebook anders verhält.

Hier ein Sreenshot, darauf kann man die verwendeten Komponenten sehen. Ich hab auch ein kleines Test-Progrämmchen angehängt.

Wer kann mir Tipps geben? Vielen Dank...
Dateianhänge
Screenshot.png
Screenshot.png (22.94 KiB) 616 mal betrachtet
SQlite3_Test.zip
(3.07 MiB) 22-mal heruntergeladen

Benutzeravatar
Zvoni
Beiträge: 250
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von Zvoni »

Hast du vielleicht zufällig in Win11 die Gross-/Kleinschreibung beachten von Ordner/Dateinamen aktiv?

Das einzige was mir auffällt ist:
in deiner Form hast du als Pfad: DatabaseName = 'C:\Lazarus-Prog\SQlite3_Test\Datenbank\Datenbank_SeitenPara.db3'
Im Code hast du : Pfad := (ExtractFilePath(Application.ExeName) + 'DATENBANK\');

btw. Würde eher Application.Location nehmen statt ExeName

EDIT: Schmarrn. Dann müsste das Programm ja meckern, dass es die Datenbank-Datei nicht findet.
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von shokwave »

Hallo,

kann es sein das deine alten Programme kein SQL verwendet haben? Ich habe jetzt auch nicht wirklich die Ahnung, aber ich glaube nicht dass du Änderungen auf dem ResultSet einer SQLQuery machen kannst.

Der Name tbSePa deutet darauf hin, dass du ursprünglich eine Tabelle(DBase/Paradox...) hattest. Da hast du direkt auf der Tabelle gearbeitet und die DB-Komponenten von Lazarus können da auch Änderungen speichern.
Bei SQL bekommst du von der Datenbank nur eine Antwort in Form einer Tabelle(ResultSet). Die kannst du dann anzeigen, aber um Änderunger an der Datenbank vorzunehmen, musst du das der Datenbank, in Form einer neuen Query, mitteilen. Das, denke ich, können die DB-Komponenten nicht leisten.
mfg Ingo

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6651
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von af0815 »

Vielleicht ganz einfach über das alte Thema ApplyUpdates gestolpert ?!
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Meridian
Beiträge: 30
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von Meridian »

Hallo,

danke für die Antwort.

Ja, ich habe früher mit Paradox gearbeitet und will dieses Prog gerne auf SQlite3 umschreiben, bzw. neu schreiben. Deshalb ha eich die gleichen Bezeichnungen genommen. Aber die Komponenten, die mit tb beginnen, sind SQLQuery.

In einem anderen, wesentlich größeren Programm habe ich ganau so gearbeitet. Auf dem alten Notebook erstellt, läuft auch noch sauber auf dem neuen Notebook. damit meine ich, dass ich es mit Lazarus bearbeiten und neu erstellen kann.

Die Komponenten kommen definitiv aus dem Package SQLdb.
Dateianhänge
Screenshot03.png
Screenshot03.png (14.9 KiB) 573 mal betrachtet
Screenshot02.png
Screenshot02.png (20.99 KiB) 573 mal betrachtet

Meridian
Beiträge: 30
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von Meridian »

af0815 hat geschrieben: Di 21. Jan 2025, 17:51 Vielleicht ganz einfach über das alte Thema ApplyUpdates gestolpert ?!
Habe es genauso gemacht, wie in anderen Programmen. In ...AfterPost und ...AfterDelete

tbSePa.UpdateMode := upWhereAll;
tbSePa.ApplyUpdates;
SQLTransaction1.CommitRetaining;


geschrieben...

Vielleicht reicht das nicht oder ist nicht korrekt...

Gruß und danke.
Dateianhänge
Screenshot04.png
Screenshot04.png (19.42 KiB) 570 mal betrachtet

Meridian
Beiträge: 30
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von Meridian »

af0815 hat geschrieben: Di 21. Jan 2025, 17:51 Vielleicht ganz einfach über das alte Thema ApplyUpdates gestolpert ?!
Hallo,

kann ich einen Tipp bekommen, wo ich mehr über das Thema ApplyUpdates erfahre? hab schon gesucht und nicht so viel gefunden :)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6651
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von af0815 »

Meridian hat geschrieben: Mi 22. Jan 2025, 11:51
af0815 hat geschrieben: Di 21. Jan 2025, 17:51 Vielleicht ganz einfach über das alte Thema ApplyUpdates gestolpert ?!
kann ich einen Tipp bekommen, wo ich mehr über das Thema ApplyUpdates erfahre? hab schon gesucht und nicht so viel gefunden :)
Wenn ich mir das Bild in dem Post vorher ansehe, so frage ich mich gerade ob der Zeitpunkt für das ApplyUpdate und den Updatemode hier nicht falsch ist. Den Updatemode gibt man normalerweise an, bevor man das Dataset öffnet, weil der Modus sehr wohl auch einen Einfluß auf das SQL-Statement haben kann.

ApplyUpdates nicht während Operationen des Datensets verwenden, sondern bevor du das Recordset, das du von der Query bekommen hast, wirklich schliessen willst. ALso bevor du Query.Close machst. Mit ApplyUpdates, sagst du genaugenommen, das alle Änderungen erledigt sind und zum Server transportiert werden sollen. Anschliessen wird bei C/S Applikation das Dataset wieder neu angefordert, weil ja auch andere Änderungen inzwischen gemacht worden können. Generell kann ein ApplyUpdates auch fehlschlagen, wenn am DB-Server in der Datenmenge Änderungen erfolgt sind. Ist jetzt bei SQLite nicht so das Thema.

Vorschlag, mach die ein einfache App zum Testen von solchen Themen.

Hast du bei der Query sqoAutoApplyUpdates und sqoAutoCommit angewählt ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Meridian
Beiträge: 30
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von Meridian »

af0815 hat geschrieben: Mi 22. Jan 2025, 15:41
Meridian hat geschrieben: Mi 22. Jan 2025, 11:51
af0815 hat geschrieben: Di 21. Jan 2025, 17:51 Vielleicht ganz einfach über das alte Thema ApplyUpdates gestolpert ?!
kann ich einen Tipp bekommen, wo ich mehr über das Thema ApplyUpdates erfahre? hab schon gesucht und nicht so viel gefunden :)
Wenn ich mir das Bild in dem Post vorher ansehe, so frage ich mich gerade ob der Zeitpunkt für das ApplyUpdate und den Updatemode hier nicht falsch ist. Den Updatemode gibt man normalerweise an, bevor man das Dataset öffnet, weil der Modus sehr wohl auch einen Einfluß auf das SQL-Statement haben kann.

ApplyUpdates nicht während Operationen des Datensets verwenden, sondern bevor du das Recordset, das du von der Query bekommen hast, wirklich schliessen willst. ALso bevor du Query.Close machst. Mit ApplyUpdates, sagst du genaugenommen, das alle Änderungen erledigt sind und zum Server transportiert werden sollen. Anschliessen wird bei C/S Applikation das Dataset wieder neu angefordert, weil ja auch andere Änderungen inzwischen gemacht worden können. Generell kann ein ApplyUpdates auch fehlschlagen, wenn am DB-Server in der Datenmenge Änderungen erfolgt sind. Ist jetzt bei SQLite nicht so das Thema.

Vorschlag, mach die ein einfache App zum Testen von solchen Themen.

Hast du bei der Query sqoAutoApplyUpdates und sqoAutoCommit angewählt ?
Danke für die Hinweise..., wir sind eine Stufe weiter.

Ich habe also die beiden Optionen sqoAutoApplyUpdates und sqoAutoCommit beim Query auf True gestz und weiter getestet. Dann musste ich noch beim Query UpdateMode auf upWhereAll setzen. Siehe Screesho05. Und die procedure ...AfterDelete und ...AfterPost habe ich deaktiviert.

In den beiden kleinen DBEdits (Feldtyp Integer) lassen sich nach Belieben ändern, ergänzen usw. und ich kann auf Post und Refresh klicken ohne Fehlermeldung wird es in der Datenbank gespeichert!

Die beiden größeren DBEdits sind vom Feldtyp String. Wenn ich hier Änderungen eintrage und auf Post klicke, gibt es eine Fehlermeldung. Siehe Screenshot06.

Und wenn ich mit der Tab-Taste vom größeren DBEdit string ins kleine DBEdit zum Integer springe, wird dort eine längere Zahl eingetragen. Siehe Screenshot07.

Das hatte ich bisher noch nie :)
Dateianhänge
Screenshot05.png
Screenshot05.png (63.91 KiB) 454 mal betrachtet
Screenshot06.png
Screenshot06.png (47.54 KiB) 454 mal betrachtet
Screenshot07.png
Screenshot07.png (24.96 KiB) 454 mal betrachtet

charlytango
Beiträge: 1034
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von charlytango »

Nur so eine Idee....

Wie sieht deine Tabellendefinition aus?
Wie hast du die Text bzw Stringfelder definiert. Vom Typ Text?, Char? Varchar?
Versuche es mal mit VARCHAR(150) oder so.

Meridian
Beiträge: 30
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Gelöst - Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von Meridian »

charlytango hat geschrieben: Mi 22. Jan 2025, 23:43 Nur so eine Idee....

Wie sieht deine Tabellendefinition aus?
Wie hast du die Text bzw Stringfelder definiert. Vom Typ Text?, Char? Varchar?
Versuche es mal mit VARCHAR(150) oder so.
Danke, ich habe den Feldtyp Char genommen und es hat funktioniert. Aber der hauptfehler lag wohl an anderer Stelle. Und zwar bei mir :)

Daten lassen sich jetzt ändern und hinzufügen.

Vielen Dank an alle beteiligten.

Meridian
Beiträge: 30
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von Meridian »

Jetzt habe ich eine weitere Frage zu SQlite3.

Ich erstelle mit meinem Programm die Datenbank, kann Daten hinzufügen, ändern und löschen. Soweit alles in Ordnung.

Wenn ich die Datenbank aber einmal mit dem DB Brwoser bearbeite, tritt das alte Problem wieder auf und ich kann mit mit meinem Prog keine Daten mehr ändern.

Gibt's eine Anweisung, dass die Daten von 2 oder mehr systeme´n bearbeitet werden dürfen?

Bin bisher nicht fündig geworden.

Benutzeravatar
Zvoni
Beiträge: 250
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von Zvoni »

Meridian hat geschrieben: Fr 24. Jan 2025, 14:49 Jetzt habe ich eine weitere Frage zu SQlite3.

Ich erstelle mit meinem Programm die Datenbank, kann Daten hinzufügen, ändern und löschen. Soweit alles in Ordnung.

Wenn ich die Datenbank aber einmal mit dem DB Brwoser bearbeite, tritt das alte Problem wieder auf und ich kann mit mit meinem Prog keine Daten mehr ändern.

Gibt's eine Anweisung, dass die Daten von 2 oder mehr systeme´n bearbeitet werden dürfen?

Bin bisher nicht fündig geworden.
Gleichzeitig bearbeiten?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Meridian
Beiträge: 30
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von Meridian »

Zvoni hat geschrieben: Fr 24. Jan 2025, 15:36
Meridian hat geschrieben: Fr 24. Jan 2025, 14:49 Jetzt habe ich eine weitere Frage zu SQlite3.

Ich erstelle mit meinem Programm die Datenbank, kann Daten hinzufügen, ändern und löschen. Soweit alles in Ordnung.

Wenn ich die Datenbank aber einmal mit dem DB Brwoser bearbeite, tritt das alte Problem wieder auf und ich kann mit mit meinem Prog keine Daten mehr ändern.

Gibt's eine Anweisung, dass die Daten von 2 oder mehr systeme´n bearbeitet werden dürfen?

Bin bisher nicht fündig geworden.
Gleichzeitig bearbeiten?

Nein, nicht gleichzeitig. Entweder oder...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6651
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: SQlite3 Änderungen werden nicht übernommen / neues Notebook

Beitrag von af0815 »

Meridian hat geschrieben: Fr 24. Jan 2025, 15:46 Nein, nicht gleichzeitig. Entweder oder...
Die Frage ist jetzt, ob die beiden Programme die DB sauber hinterlassen. Weil es werden in der DB während der Bearbeitung Sperrvermerke gespeichert. Die werden beim richtigen Abschluss wieder entfernt.

Der DB Browser sollte da nichts böses machen, außer er ändert dir wieder Metadaten im Hintergrund. Das sollte man aber herausfinden können.

Hinweis, im Lauarusverzeichnis unter Tools->LazDatadesktop gibt es den LazDatadesktop als Projekt. Kompilier dir den mal und schau dir die Datenbank damit an. Vielleicht siehst du damit irgendwas. Weil dieser DB-Desktop arbeitet mit SQLdb als Basis im Hintergrund. Alles was dort geht, kannst du auch im Programm machen. Ist auch ein gute Quelle für Infos, wenn man sich den Quellcode ansieht (für Fortgeschritterne)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten