DBGrid aus SQLite füllen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Johannes55
Beiträge: 8
Registriert: Mo 23. Feb 2026, 17:20

DBGrid aus SQLite füllen

Beitrag von Johannes55 »

Hallo Forum.

Nachdem die Verbindung zu MYSQL/MariaDB nicht funktionierte, habe ich mich mit SQLITE beschäftigt.
Ich hab eine kleine Tabelle angelegt. Diese wird gelesen (Dataset ist gefüllt), aber nicht ins DBGrid ausgegeben.

SQLite3Connection1.Open;
SQLite3Connection1.Connected := True;
SQLTransaction1.DataBase := SQLite3Connection1;
SQLQuery1.DataBase := SQLite3Connection1;
SQLTransaction1.Active := True;
SQLQuery1.SQL.Clear;
Dbgrid1.Clear;
SQLQuery1.SQL.Text := 'SELECT * FROM Beitragsarten';

SQLQuery1.Open;
DataSource1.DataSet := SQLQuery1;
DataSource1.DataSet.Active := true;
// Wenn ich das in der Schleife prüfe, sind die Felder gefüllt. //<<<----
// while not Datasource1.Dataset.Eof do begin
DBGrid1.DataSource := DataSource1;
//showmessage(Datasource1.Dataset.FieldByName('Bezeichnung').AsString); // Inhalt ist korrekt
DBGrid1.AutoFillColumns := True; //<<<---- Hier wird das Grid gefüllt ???
// Datasource1.Dataset.next;
// end;

Datasource1.free;
SQLQuery1.Close;
Dateianhänge
unit1.lfm
(2.14 KiB) 204-mal heruntergeladen
unit1.pas
(2.08 KiB) 208-mal heruntergeladen

charlytango
Beiträge: 1236
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: DBGrid aus SQLite füllen

Beitrag von charlytango »

Um dir qualifiziert helfen zu können, ist ein Testprojekt immer eine gute Idee.
Dafür gibt es eine Funktion in Lazarus, die alle nötigen Dateien zur Verfügung stellt.
Menü: Project - Publish Project.

Wenn du im aufpoppenden Fenster noch die Endung deiner Datenbankdatei angibst wird auch diese samt allen nötigen Dateien in ein Zip eingepackt das du hier einstellen kannst.
Johannes55 hat geschrieben: Do 26. Feb 2026, 17:44 DBGrid1.AutoFillColumns := True; //<<<---- Hier wird das Grid gefüllt ???
Nein, der Grid wird (die richtigen Verbindungen vorausgesetzt) mit dem öffnen der Datenquelle gefüllt -- das hat nur etwas mit der Spaltenbreite zu tun.
https://lazarus-ccr.sourceforge.io/docs ... lumns.html

Das eigentliche Problem liegt woanders -- vermutlich in der Art zu denken.
Du Setzt ein Klick-Event eines Buttons ein, das ja komplett durchläuft.
Folgendes passiert also:
die DB wird geöffnet, die Verbindungen zum Grid hergestellt, die Query wird geöffnet, aber hier
Johannes55 hat geschrieben: Do 26. Feb 2026, 17:44 Datasource1.free;
SQLQuery1.Close;
// Transaktion bestätigen
SQLTransaction1.Commit;
Showmessage('Ende');
wird in einem Rutsch gleich wieder alles geschlossen.
Der DBGrid kann nichts anzeigen wenn die Datenquelle geschlossen ist.

Ach ja --> SELECT * bringt dich schnell in Teufels Küche

Beiliegend findest du ein lauffähiges Beispiel das einige Situationen darstellt.

Tip:
Pack deine Datenverbindung in ein Datenmodul, damit sie nicht jedesmal in einem Formular neu erstellt werden muss.
Die allermeisten Datenbankapplikationen brauchen nur eine Verbindung zum Server. Jedem Formular seine eigene Verbindung zu spendieren frisst Speicher - und das auch auf der Serverseite.
Dateianhänge
SQLite_Easy.zip
(495.6 KiB) 40-mal heruntergeladen

charlytango
Beiträge: 1236
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: DBGrid aus SQLite füllen

Beitrag von charlytango »

da gibt es noch eine neuere Version 8)
Dateianhänge
SQLite_Simple2.zip
(529.57 KiB) 46-mal heruntergeladen

Benutzeravatar
Zvoni
Beiträge: 565
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: DBGrid aus SQLite füllen

Beitrag von Zvoni »

Johannes55 hat geschrieben: Do 26. Feb 2026, 17:44 Hallo Forum.

Nachdem die Verbindung zu MYSQL/MariaDB nicht funktionierte, habe ich mich mit SQLITE beschäftigt.
Ich hab eine kleine Tabelle angelegt. Diese wird gelesen (Dataset ist gefüllt), aber nicht ins DBGrid ausgegeben.
Und was hat da nicht funktioniert? Siehe auch dein anderer Thread.
Nicht die Flinte ins Korn werfen.

Die Verbindung mit MySQL ist einfach, solange ein paar Spielregeln eingehalten werden.

Alles danach ist es dann egal, ob du MySQL, PostGres, SQLite oder die Sockenschublade nimmst: Ablauf ist immer gleich
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.

charlytango
Beiträge: 1236
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: DBGrid aus SQLite füllen

Beitrag von charlytango »

Zvoni hat geschrieben: Fr 27. Feb 2026, 12:43 Alles danach ist es dann egal, ob du MySQL, PostGres, SQLite oder die Sockenschublade nimmst: Ablauf ist immer gleich
So eine Anbindung mit SQLDB an seine Sockenschublade würde ich schon gerne sehen.
Möglicherweise tauchen dann die Socken auf die paarweise in die Waschmaschine kommen aber einzeln heraus ;-)))

Johannes55
Beiträge: 8
Registriert: Mo 23. Feb 2026, 17:20

Re: DBGrid aus SQLite füllen

Beitrag von Johannes55 »

Hallo Charlytango

Danke für die zahlreichen Infos.
Bevor ich weiss, ob ich mit dieser Umgebung arbeiten kann, stecke ich keine Arbeit rein.
Das Beispiel ist "Quick + dirty", aber zum Testen sollte es doch ausreichen.
Wenn ich z.B. im Debug-Mode mit F8 Einzelschritte ausführen, ist das Dstaset korrekt gefüllt.Warum nicht das Grid?
Das ist z.Zt. Mein Problem.
Ich habe z..B. Im Grid Columns mit den Namen der DB-Felder angelegt. So kannte ich das bisher in Delphi, aber da benutzten wir eigene Komponenten.
Gruß Johannes

wp_xyz
Beiträge: 5389
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGrid aus SQLite füllen

Beitrag von wp_xyz »

Johannes55 hat geschrieben: Fr 27. Feb 2026, 18:23 Wenn ich z.B. im Debug-Mode mit F8 Einzelschritte ausführen, ist das Dstaset korrekt gefüllt.Warum nicht das Grid?
Hast du das DBGrid mit der DataSource verbunden?

Code: Alles auswählen

DBGrid1.DataSource := DataSource1;
Sowas sehe ich in den beiden im 1.Beitrag angehängten Dateien unit1.pas und unit1.lfm nicht.

Und du musst, um das Grid zu befüllen, nicht die Records einzeln durchlaufen. Einfach SQLConnection verbinden (SQLite3Connection1.Connect), Query öffnen (SQLQuery1.Open) - und das Grid füllt sich automatisch (sofern die Verbindungen gemacht sind: DBGrid1.Datasource := DataSource1; und DataSource1.Dataset := SQLQuery1).

Johannes55
Beiträge: 8
Registriert: Mo 23. Feb 2026, 17:20

Re: DBGrid aus SQLite füllen

Beitrag von Johannes55 »

Hallo.
Du hast wahrscheinlich übersehen, dass die Zuordnungen vorhanden sind. Die Schleife ist inaktiv, da kommentiert. War nur zum Testen, ob Dataset gefüllt ist

Antworten