SQLite3 mit Delphi und dbExpress
Schnelleinstieg
SQLite Datenbank und Tabelle erstellen
Eine neue SQLite Datenbank Buecher.db mit Tabelle Buecher erstellen.
Delphi Projekt erstellen oder öffnen, Form wählen
Vgl. frmMain
TSQLConnection Komponente hinzufügen
TSQLConnection (dbExpress). Eigenschaften anpassen: Name: SQLConnection; Driver=SQLite; LoginPrompt=False
Variable definieren
var FSQLCommandText: String; FSQLDataSet: TDataSet; sStr: String; i: Integer;
SQLite Datenbank erstellen
Try SQLConnection.Connected := False; SQLConnection.Params.Values['FailIfMissing'] := 'False'; SQLConnection.Connected := True; Except On E: EDatabaseError Do ShowMessage(E.Message); End;
Tabelle hinzufügen
Try FSQLCommandText := 'CREATE TABLE Buecher (BuchID INTEGERPRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,TitelVARCHAR(100) NOT NULL,AutorID INTEGER,ISBN VARCHAR(20));'; SQLConnection.ExecuteDirect(FSQLCommandText); Except On E: EDatabaseError Do ShowMessage(E.Message); End;
Testdaten hinzufügen
Try FSQLCommandText := 'INSERT INTO Buecher(BuchID,Titel,AutorID,ISBN) VALUES (NULL,"B1",1,"123");'; SQLConnection.ExecuteDirect(FSQLCommandText); FSQLCommandText := 'INSERT INTO Buecher(BuchID,Titel,AutorID,ISBN) VALUES (NULL,"B2",1,"456");'; SQLConnection.ExecuteDirect(FSQLCommandText); Except On E: EDatabaseError Do ShowMessage(E.Message); End;
Testdaten zeigen
Try FSQLCommandText := 'SELECT * FROM Buecher;'; SQLConnection.Execute(FSQLCommandText, NIL, FSQLDataSet); FSQLDataSet.First; While NOT FSQLDataSet.EOF Do Begin sStr := ''; For i := 0 To FSQLDataSet.FieldCount - 1 Do sStr := sStr + ' ' + FSQLDataSet.Fields[i].AsString; ShowMessage(sStr); FSQLDataSet.Next; End; Except On E: EDatabaseError Do ShowMessage(E.Message); End;
SQLite Datenbank Tabellenliste im TMemo
Delphi Projekt erstellen oder öffnen, Form wählen
Vgl. frmMain
Komponenten hinzufügen
TSQLConnection (dbExpress).
Eigenschaften anpassen: Name: SQLConnection; Driver=SQLite; LoginPrompt=False
TMemo (Standard). Eigenschaften anpassen: Name: memoOutput; ScrollBars: ssBoth; WordWrap: False;
Procedure FormCreate erstellen/anpassen
SQLConnection Pfad zur bestehenden SQLite Datenbank Buecher.db setzen und verbinden.
Ist die Datenbank nicht vorhanden, dann Abbruch.
Try SQLConnection.Connected := False; SQLConnection.Params.Values['Database']:=''; SQLConnection.Params.Values['FailIfMissing']:='True'; SQLConnection.Connected := True; Except On E: EDatabaseError Do ShowMessage(E.Message); End;
Procedure FormCreate erweitern
Datenbank ist geöffnet, Tabellenliste im TMemo ausgeben:
Var FSQLCommandText: String; FSQLDataSet: TDataSet; sLine: String; i: Integer; Try memoOutput.Lines.Text := 'Tabellen:'; FSQLCommandText := 'SELECT name FROM SQLITE_MASTER WHERE TYPE="table" ORDER BY name;'; SQLConnection.Execute(FSQLCommandText, NIL, FSQLDataSet); FSQLDataSet.First; While NOT FSQLDataSet.EOF Do Begin sLine := ''; For i := 0 To FSQLDataSet.FieldCount - 1 Do sLine := sLine + FSQLDataSet.Fields[i].AsString; memoOutput.Lines.Add(sLine); FSQLDataSet.Next; End; Except On E: EDatabaseError Do ShowMessage(E.Message); End;
Inhalt TMemo
Ergebnis SQL-Abfrage: SELECT name FROM SQLITE_MASTER WHERE TYPE=“table“ ORDER BY name;
SQLite Datenbank Datensätze im TMemo
SQLite Datenbank öffnen
Siehe vorher.
SQL-Abfrage ausführen und Ergebnis speichern (TDataSet)
Var FSQLCommandText: String; FSQLDataSet: TDataSet; FSQLCommandText := 'SELECT * FROM Autoren;'; SQLConnection.Execute(FSQLCommandText, NIL, FSQLDataSet);
Datensätze im TMemo zeigen
Var FSQLCommandText: String; FSQLDataSet: TDataSet; sLine: String; i: Integer; memoSQLiteDBQueryResult.Lines.Text := 'Anzahl Datensätze: ' + IntToStr(FSQLDataSet.RecordCount); // Spaltennamen sLine := ''; For i := 0 To FSQLDataSet.FieldCount - 1 Do sLine := sLine + ' ' + FSQLDataSet.Fields[i].FieldName; memoSQLiteDBQueryResult.Lines.Add(sLine); memoSQLiteDBQueryResult.Lines.Add('----------'); // Inhalt FSQLDataSet.First; While NOT FSQLDataSet.EOF Do Begin sLine := ''; For i := 0 To FSQLDataSet.FieldCount - 1 Do sLine := sLine + ' ' + FSQLDataSet.Fields[i].AsString; memoSQLiteDBQueryResult.Lines.Add(sLine); FSQLDataSet.Next; End;
Inhalt TMemo
Ergebnis SQL-Abfrage: SELECT * FROM Autoren
SQLite Datenbank Datensätze im TStringGrid
SQLite Datenbank öffnen
Siehe vorher.
Form TStringGrid Komponente hinzufügen
TStringGrid (Additional). Eigenschaften anpassen:
Name sgSQLiteDBQueryToStringGrid
Options: [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goRowSelect]
SQL-Abfrage ausführen
Var FSQLCommandText: String; FSQLDataSet: TDataSet; FSQLCommandText := 'SELECT * FROM Autoren;'; SQLConnection.Execute(FSQLCommandText, NIL, FSQLDataSet);
Datensätze lesen und im StringGrid anzeigen
If FSQLDataSet.IsEmpty Then Exit; StringGrid1.ColCount := FSQLDataSet.FieldCount + 1; StringGrid1.RowCount := FSQLDataSet.RecordCount + 1; StringGrid1.FixedCols := 1; StringGrid1.FixedRows := 1; StringGrid1.ColWidths[0] := 16; //Fixspalte Breite anpassen // Spaltenüberschriften setzen For nCol := 0 To FSQLDataSet.FieldCount - 1 Do StringGrid1.Cells[nCol + 1, 0] := FSQLDataSet.Fields[nCol].FieldName; nLin := 0; // Daten im Stringgrid zeigen FSQLDataSet.First; While Not FSQLDataSet.Eof Do Begin For nCol := 0 To FSQLDataSet.FieldCount - 1 Do StringGrid1.Cells[nCol+1,nLin + StringGrid1.FixedRows]:= FSQLDataSet.Fields[nCol].AsString; FSQLDataSet.Next; Inc(nLin); End;
Inhalt TStringGrid
SQLite Datenbank Datensätze im DBGrid (Direkt)
Eine vorhandene SQLite Datenbank öffnen und die Datensätze in einem DBGrid zeigen.
Verzeichnis für ein neues Delphi Projekt erstellen
Vgl. Buecher
Dateien in das neue Verzeichnis kopieren
DLL sqlite3.dll (oder in das Windows System Verzeichnis kopieren) Eine bestehende Datenbank kopieren. Vgl. buecher.db
Delphi neues Projekt erstellen
File > New > VCL Forms Application Delphi
Projekt Eigenschaften anpassen
Project > Options > Delphi Compiler
Target: Release Configuration; Output Directory: Leeren Eintrag; Unit Output Directory: Leeren Eintrag
Form Form1 Eigenschaften anpassen
Name: frmMain; Caption: Bücherliste; Position: poDesktopCenter
In Form frmMain Komponenten hinzufügen verbinden und anpassen
TSQLConnection (dbExpress) -> TSQLDataSet (dbExpress) -> TDataSetProvider (Data Access)-> ClientDataSet (Data Access)-> TDataSource (Data Access) -> TDBGrid (Data Controls)
TSQLConnection
Name: SQLConnection; Driver=SQLite; LoginPrompt=False; Params: FailIfMissing=False, Database=buecher.db; Connected=True
TSQLDataset und SQL-Befehl definieren
Name: SQLDataSet; Connection: SQLConnection; CommandText=SELECT * FROM Buecher;
CommandType=ctQuery; Active=True
TDataSetProvider
Name=DataSetProvider; Dataset=SQLDataSet
TClientDataSet
Name=ClientDataset ; Providername=DataSetProvider; Active=True
TDataSource
Name=DataSource; DataSet=ClientDataSet
TDBGrid
Name=DBGrid; DataSource=DataSource; ReadOnly=True; Options=RowSelect zusätzlich aktivieren; Align=alClient; Columns=Add All Fields, ggf. Feldeigenschaften anpassen, wie Titel (Title), Spaltenbreite (Width)
Projekt kompilieren und ausführen (F9)
Unit speichern unter umain
Projekt speichern unter ropdelphisqliteeinstieg
Design | Run | Run (Spaltentitel angepasst) |
---|---|---|
![]() |
![]() |
![]() |
Formular entsprechend erweitern, wie z.B. TDBNavigator Komponente, TEdit für SQL-Befehl SELECT.
SQLite Datenbank Datensätze im DBGrid (Aktionen)
Eine vorhandene SQLite Datenbank öffnen und die Datensätze in einem DBGrid zeigen.
Verwendet werden Aktionen (Actions).
Form und Komponente haben den gleichen Aufbau, wie im vorherigen Beispiel.
SQLite Datenbank verbinden
Procedure TfrmMain.ActionDBConnectExecute(Sender: TObject); Begin Try SQLConnection.Connected := False; SQLDataSet.Active := Connected; SQLConnection.Params.Values['Database'] := ''; SQLConnection.Params.Values['FailIfMissing'] := 'False'; SQLConnection.Connected := True; Except On E: EDatabaseError Do ShowMessage(E.Message); End; End;
SQL-Abfrage ausführen und Datensätze im TDBGrid zeigen
Procedure TfrmMain.ActionQueryToDBGridExecute(Sender: TObject); Var FSQLCommandText : String; Begin // Query aus einem TMemo verwenden FSQLCommandText := memoSQLiteDBQuery.Text; // Query prüfen ob SELECT Befehl If (LeftStr(LowerCase(FSQLCommandText),6)) 'select') Then Begin ShowMessage('Abbruch: SQL-Query enthält kein SELECT Befehl!'); Exit; End; // SQLite DB verbinden If SQLConnection.Connected = False Then ActionSQLiteDBConnectExecute(Sender); If SQLConnection.Connected = False Then Exit; Try // ClientDataSet and SQLDataSet deaktivieren ClientDataSet.Active := False; SQLDataSet.Active := False; // SQL-Befehl zuweisen SQLDataSet.CommandText := FSQL; // ClientDataSet and SQLDataSet aktivieren SQLDataSet.Active := True; ClientDataSet.Active := True; // Query ausführen SQLDataSet.Open; Except On E: EDatabaseError Do ShowMessage(E.Message); End; End;