Wie kann ich eine Datenbank über ein TGrid updaten?
Wie kann ich eine Datenbank über ein TGrid updaten?
Es ist vielleicht für ganz viele von Euch eine leichte Einsteiger-Frage, für mich ist es jedoch seit Jahren ein großes Rätsel... Nein keine Angst, solange probiere ich nicht, ich habe nur gerade ein altes Programm von 2017 wiedergefunden und erschreckt festgestellt, daß ich das Edit/Update-Problem damals keinesfalls gelöst hatte und schlimmer, daß anscheinend nicht einmal Code für ein Datenbank-Update drin ist.
Also die Anzeige funktioniert, ich kann die Tabelle im Grid sehen und scrollen. Ein Feld öffnet sich auf Klick auch in einem extra Fenster und dessen Inhalt sollte eigentlich nach dem Klick auf "Update" gesichert werden. Nur finde ich ehrlich gesagt zwar rudimentär ein wenig Code mit ApplyUpdates im Cursor, der Debugger sagt mir aber an der Stelle sinngemäß meine Datenbank wäre nicht offen für Edit. Das kann ja sein aber ich kenne mich leider nicht so gut aus. In Java gelang es mir, die gleiche (SQLite) Datenbank upzudaten. Ich hänge in der Anlage mal mein Projekt rein - bitte nicht schimpfen, ich bin kein Profi. Ich wäre auch an einer generellen Lösung interessiert, also ein Beispiel, wie man das macht. Ich glaube diese Art des Cursors mit Edit und Update kannte ich noch nicht und habe damals aufgegeben. In Java hatte ich glaube ich brav mit normalen SQL Update gearbeitet, weiß aber nicht mehr, ist jetzt gut 6 Jahre her und ich werde alt...
Also die Anzeige funktioniert, ich kann die Tabelle im Grid sehen und scrollen. Ein Feld öffnet sich auf Klick auch in einem extra Fenster und dessen Inhalt sollte eigentlich nach dem Klick auf "Update" gesichert werden. Nur finde ich ehrlich gesagt zwar rudimentär ein wenig Code mit ApplyUpdates im Cursor, der Debugger sagt mir aber an der Stelle sinngemäß meine Datenbank wäre nicht offen für Edit. Das kann ja sein aber ich kenne mich leider nicht so gut aus. In Java gelang es mir, die gleiche (SQLite) Datenbank upzudaten. Ich hänge in der Anlage mal mein Projekt rein - bitte nicht schimpfen, ich bin kein Profi. Ich wäre auch an einer generellen Lösung interessiert, also ein Beispiel, wie man das macht. Ich glaube diese Art des Cursors mit Edit und Update kannte ich noch nicht und habe damals aufgegeben. In Java hatte ich glaube ich brav mit normalen SQL Update gearbeitet, weiß aber nicht mehr, ist jetzt gut 6 Jahre her und ich werde alt...
- Dateianhänge
-
ZitateOnlineApplyUpdate.zip
- (470.67 KiB) 34-mal heruntergeladen
-
- Beiträge: 1346
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
- CPU-Target: 32/64Bit
Re: Wie kann ich eine Datenbank über ein TGrid updaten?
Es gibt die Komponente TDBGrid, diese ist diese zeigt direkt den Inhalt der Datenbank Tabelle.
TDBGrid wird mit TDataSource verbunden.
TDataSource mit dem Tabellen Objekt oder der Query und diese mit dem Connector.
So ziemlich ohne eigenen Code zu schreiben funktioniert das ganze schon.
Ein TGrid zu verwenden und das ganze "Updaten" manuell zu programmieren ist der völlig falsche Weg, Es sieht so aus als ob du große Teile von deinem Code einfach neu schreiben solltest und die Struktur umbauen so wie es sich die Entwickler von Datenbanken unter Lazarus gedacht haben.
TDBGrid wird mit TDataSource verbunden.
TDataSource mit dem Tabellen Objekt oder der Query und diese mit dem Connector.
So ziemlich ohne eigenen Code zu schreiben funktioniert das ganze schon.
Ein TGrid zu verwenden und das ganze "Updaten" manuell zu programmieren ist der völlig falsche Weg, Es sieht so aus als ob du große Teile von deinem Code einfach neu schreiben solltest und die Struktur umbauen so wie es sich die Entwickler von Datenbanken unter Lazarus gedacht haben.
Re: Wie kann ich eine Datenbank über ein TGrid updaten?
Mein Programm nutzt schon TDBGrid, wie ich gerade sehe, ich habe also ungenau geschrieben bzw gefragt. Die Anzeige über DataSource funktioniert ja auch schon, nur das mit dem Edit/Update... Hättest du ein lauffähiges Beispiel (mit dieser oder einer anderen Tabelle)
-
- Beiträge: 1346
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
- CPU-Target: 32/64Bit
Re: Wie kann ich eine Datenbank über ein TGrid updaten?
Ich verwende immer die Zeos Komponente für die Datenbank.
Was du verwendet hast, ich habe es nicht raus gefunden.
Also habe ich mal deinen Code gelöscht.
Hier wie es eigentlich "richtig" und "Einfach" geht.
Was du verwendet hast, ich habe es nicht raus gefunden.
Also habe ich mal deinen Code gelöscht.
Hier wie es eigentlich "richtig" und "Einfach" geht.
- af0815
- Lazarusforum e. V.
- Beiträge: 6117
- 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: Wie kann ich eine Datenbank über ein TGrid updaten?
Es war übrigends offensichtlich SQLdb
Und ja, man könnte es so lösen. Aber es ist schwer den aktuellen Zustand der DB so zu steuern, vor allen weil man am RAD-System vorbei arbeitet. Zumindest was ich da gesehen habe. Ich würde entweder komplett RAD machen, dann auch die Query entsprechend alles machen lassen (dann aber auch die Insert, Update und Delete Statements richtig in der Query eintragen), oder alles zu Fuß machen. So hybride Geschichten haben gerne Pferdefüße.SQLite3Conn, SQLDB,
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1346
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
- CPU-Target: 32/64Bit
Re: Wie kann ich eine Datenbank über ein TGrid updaten?
Kann sein dass es diese SQLDB war.
Alles sehr komplex und von Hand programmiert, wo man doch die meisten Sachen super einfach über das Formular lösen kann.
Ich habe jetzt die ganze Verbindungen in das Formular gezogen, ich denke damit wird ihm das mit der Datenbank etwas besser verständlich.
Und den ganzen anderen Code gelöscht, damit das Beispiel minimal klein ist und es einen Lerneffekt gibt (hoffe ich zumindest).
Alles sehr komplex und von Hand programmiert, wo man doch die meisten Sachen super einfach über das Formular lösen kann.
Ich habe jetzt die ganze Verbindungen in das Formular gezogen, ich denke damit wird ihm das mit der Datenbank etwas besser verständlich.
Und den ganzen anderen Code gelöscht, damit das Beispiel minimal klein ist und es einen Lerneffekt gibt (hoffe ich zumindest).
- af0815
- Lazarusforum e. V.
- Beiträge: 6117
- 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: Wie kann ich eine Datenbank über ein TGrid updaten?
Komplex nicht wirklich, aber man verliert gerne die Kontrolle, wenn man dann mit RAD (über das Formular) mixed. Damit greift man direkt in die Zustände ein und es geht gerne schief. Das hat jetzt nichts mit SQLdb oder ZEOS zu tun. ZEOS ist mal eine externe Komponnete und SQLdb in Lazarus direkt vorhanden. Was man verwendet ist mittlerweile Geschmackssache, nur sind die beiden Systeme nur bedingt kompatibel und man muss aufpassen bei einem Wechsel des Systems die Sache nicht zu verschlimmbessern.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Wie kann ich eine Datenbank über ein TGrid updaten?
Hallo ich wollte gerade mal das Beispiel ausprobieren, leider sagt mir mein Lazarus
"zcomponent nicht gefunden" und ich soll im Projektinspektor nachsehen (da ist auch ein Ausrufezeichen).
Wie bekomme ich die entsprechende Ressource und wie in mein Projekt hinein? Sorry wenn ich so wenig weiß. Ich würde ja gerne den oder einen empfohlenen Weg gehen und notfalls (versuchen) meine andere in der Unit vorhandene DB-Verarbeitung zu integrieren, aber ich finde dieses zcomponent nicht. Hat es idealerweise eine ähnliche Query-Handhabung wie das Modul, welches ich benutzt habe (ausgesucht vor > 6 Jahren auch aufgrund eines Internet-Tips und weil ich irgendeine Query brauchte, die das gleiche machte, was man uns in Java gezeigt hat)
"zcomponent nicht gefunden" und ich soll im Projektinspektor nachsehen (da ist auch ein Ausrufezeichen).
Wie bekomme ich die entsprechende Ressource und wie in mein Projekt hinein? Sorry wenn ich so wenig weiß. Ich würde ja gerne den oder einen empfohlenen Weg gehen und notfalls (versuchen) meine andere in der Unit vorhandene DB-Verarbeitung zu integrieren, aber ich finde dieses zcomponent nicht. Hat es idealerweise eine ähnliche Query-Handhabung wie das Modul, welches ich benutzt habe (ausgesucht vor > 6 Jahren auch aufgrund eines Internet-Tips und weil ich irgendeine Query brauchte, die das gleiche machte, was man uns in Java gezeigt hat)
Re: Wie kann ich eine Datenbank über ein TGrid updaten?
und an af0815: was habe ich denn bei sqldb vergessen bzw falsch gemacht? Gibt es da für die Query die gleichen Methoden?
- af0815
- Lazarusforum e. V.
- Beiträge: 6117
- 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: Wie kann ich eine Datenbank über ein TGrid updaten?
Klare Antwort von Radio Eriwan: Im Prinzip ja.
Die Methoden sind ähnlich und auch die Vorgangsweise, die Namen sind etwas abweichend. Ich habe mir die Änderungen von MmVisual (noch) nicht angesehen, da ich aktuell Computer-Detox mache

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1346
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
- CPU-Target: 32/64Bit
Re: Wie kann ich eine Datenbank über ein TGrid updaten?
Das Zeos kann man von OPM laden.
Package > Online Package Manager ...
Dann nach Zeos suchen. Ich verwende die V7.14, noch nicht V8
Package > Online Package Manager ...
Dann nach Zeos suchen. Ich verwende die V7.14, noch nicht V8
- af0815
- Lazarusforum e. V.
- Beiträge: 6117
- 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: Wie kann ich eine Datenbank über ein TGrid updaten?
Warum nicht SQLdb nutzen, ist bei Lazarus dabei. Das ist wieder eine extra Abhängigkeit und bei der nächsten Frage, heisst es dann - deswegen werde ich mir nicht ZEOS installieren. Aber jeder wie er glaubt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1346
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
- CPU-Target: 32/64Bit
Re: Wie kann ich eine Datenbank über ein TGrid updaten?
Es gibt bei Zeos so eine Kleinigkeit ...
TZQuery.SortedFields
TZQuery.SortType
TZQuery.Filter
TZQuery.Filtered
Gibt es so etwas vergleichbares in der SQLDB?
Ich hatte mal versucht ein größeres Projekt auf SQLDB um zu stellen, bin jedoch schlussendlich daran gescheitert.
TZQuery.SortedFields
TZQuery.SortType
TZQuery.Filter
TZQuery.Filtered
Gibt es so etwas vergleichbares in der SQLDB?
Ich hatte mal versucht ein größeres Projekt auf SQLDB um zu stellen, bin jedoch schlussendlich daran gescheitert.
-
- Beiträge: 198
- Registriert: Mo 24. Aug 2020, 14:16
- OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
- CPU-Target: i386
Re: Wie kann ich eine Datenbank über ein TGrid updaten?
Das gibt es alles auch bei SQLdb, sortieren geht auch asc und desc gemischt, was sich bei den Zeos-Properties eher nicht so anhört.
-
- Beiträge: 1346
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
- CPU-Target: 32/64Bit
Re: Wie kann ich eine Datenbank über ein TGrid updaten?
Hm, wie sortiert man bei SQLdb ohne die Daten neu vom SQL Server ab zu fragen?
Ich habe das noch nicht gefunden.
Ich habe das noch nicht gefunden.