Home » Tutorials » Datenbanken » SQLite3 mit Delphi und dbExpress

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;