SQLite3 mit Delphi und dbExpress
SQLite SELECT Beispiele
SELECT ausführen
Wie schon erwähnt, liefert der SQL-Befehl SELECT ein Ergebnis in einem TDataset.
Beispiel SQL-Befehl SELECT und Ergebnis in einem TMemo „memoSQLOutput“ ausgeben:
Var fSLNames: TStringList; // Liste Feldnamen Tabelle i: Integer; // Laufvariable currentField: TField; // Das aktuelle Tabellenfeld currentLine: string; // Aktuelle Memozeile Feldergebnis Begin memoSQLOutput.Lines.Add('Datensätze:' +IntToStr(FDLSQLResults.RecordCount)); fSLNames := TStringList.Create; // Liste der Feldnamen initialisieren FDLSQLResults.GetFieldNames(fSLNames); // Feldnamen lesen Ergebnisdataset FDLSQLResults.First; // Ergebnis Satz für Satz lesen While NOT FDLSQLResults.Eof Do Begin currentLine := ''; For i := 0 To fSLNames.Count - 1 Do Begin currentField := FDLSQLResults.FieldByName(fSLNames[i]); currentLine := currentLine + ' ' + currentField.AsString; End; memoSQLOutput.Lines.Add(currentLine); // Datensatz anzeigen FDLSQLResults.Next; End; fSLNames.Free; End;
Es gibt Situationen, in denen nicht alle Informationen des SELECT Befehls im TDataSet gespeichert werden. Obwohl TDataSet Daten enthält, kann es zu Fehlermeldungen kommen, wie „Reader has no more rows“. Ein Beispiel ist die Anwendung von TDataSet.RecordCount. Um die Anzahl der Datensätze zu ermitteln, ist es sicherer, eine eigene Funktion zu definieren, anstatt RecordCount zu verwenden.
Function TfrmMain.DatasetRecordCount(DS: TDataSet): Integer; Var i : Integer; Begin Result := 0; If DS = NIL Then Exit; If DS.IsEmpty Then Exit; i := 0; DS.First; While Not DS.Eof Do Begin i := i + 1; DS.Next; End; Result := i; End; // Aufruf: nCnt := DatasetRecordCount(FDSSQLResults);
SELECT Ergebnis im StringGrid darstellen
Beispiel Ergebnis SQL-Befehl SELECT in einem StringGrid ausgeben.
StringGrid-Komponente Form hinzufügen:
sgSQLResults: TStringGrid;
Prozedur erstellen, die das SQL-Ergebnis in einem StringGrid zeigt
Procedure TfrmMain.ActionSQLResultsToStringGridExecute(Sender: TObject); Var nCol, nLin: Integer; Begin If Not FDLSQLResults.IsEmpty Then Begin sgSQLResults.ColCount := FDLSQLResults.FieldCount + 1; sgSQLResults.RowCount := FDLSQLResults.RecordCount + 1; sgSQLResults.FixedCols := 1; sgSQLResults.FixedRows := 1; // Spaltenüberschriften setzen For nCol := 0 To FDLSQLResults.FieldCount - 1 Do sgSQLResults.Cells[nCol + 1, 0] := FDLSQLResults.Fields[nCol].FieldName; nLin := 0; // Daten im Stringgrid zeigen FDLSQLResults.First; While Not FDLSQLResults.Eof Do Begin For nCol := 0 To FDLSQLResults.FieldCount - 1 Do Begin sgSQLResults.Cells[nCol + 1, nLin + sgSQLResults.FixedRows] := FDLSQLResults.Fields[nCol].AsString; End; FDLSQLResults.Next; Inc(nLin); End; End; End;
SQL-Befehl SELECT ausführen und Ergebnis im StringGrid zeigen
Try SQLConnection.Execute('SELECT * FROM Buecher', NIL, FDLSQLResults); ActionSQLResultsToStringGridExecute(Sender); Except On E: EDatabaseError Do ShowMessage(E.Message); End;
SELECT Ergebnis TLabel und TEdit zuweisen
Das Ergebnis des SQL SELECT Befehls wird in einem TDataSet gespeichert.
Die Werte aus dem TDataSet können entsprechenden Komponenten wie TLabel, TEdit, TLabeledEdit usw. zugewiesen werden.
Var ledTitel: TLabeledEdit; lblTitel: TLabel; // Tabelle Buecher, Spalte Titel Wert an TLabeledEdit und TLabel zuweisen ledTitel.Text := FDLSQLResults.FieldByName('Titel').AsString; lblTitel.Caption := FDLSQLResults.FieldByName('Titel').AsString;
SELECT Ergebnis TStringList und TListBox zuweisen
Das Ergebnis des SQL SELECT Befehls in einem TStringList speichern und anschließend einer TListBox zuweisen.
Stringlist erstellen:
Function BookTitelList(LSQL: String) : TStringList; // Stringlist mit Buchtitel erstellen. // SQL-Befehl „SELECT Titel FROM Buecher;“. Var i: Integer; fSL: TStringList; DS: TDataSet; Begin fSL := TStringList.Create; Try SQLConnection.Execute(LSQL, NIL, DS); DS.First; While Not DS.Eof Do Begin fSL.Add(DS.FieldByName('Titel').AsString); DS.Next; End; Except On E: Exception Do ShowMessage(E.Message); End; Result := fSL; End;
StringList TListBox zuweisen:
// TListbox Komponente hinzufügen Var lbCodeList: TListBox; // Alle Buchtitel in der Listbox zeigen. lbCodeList.Items := BookTitelList('SELECT Titel FROM Buecher;');
Hinweis: SELECT-Befehl erweitern, z.B. mit WHERE ISBN = ‚123‘;
SELECT-Ergebnis in HTML-Tabelle ausgeben
Inhalt SQL-Tabelle in eine HTML Tabelle ausgeben und im Standardbrowser darstellen.
Procedure TfrmMain.ActionSQLSelectAllBooksToHTMLExecute(Sender: TObject); Const CCRLF = #13#10; CHTMLCSS = '' + CCRLF + 'table { width:100%; background-color:#D7E4F2; border:1px; } '+ CCRLF + 'h1 { font:bold 2.0em Arial; color:#000080; background-color:#; border:1px; solid #000; vertical-align:top; overflow:hidden; }' + CCRLF + 'th { font:bold 1.6em Arial; color:#000080; background-color:#F0F8FF; border:1px; solid #000; vertical-align:top; overflow:hidden; }' + CCRLF + 'td { font:normal 1.0em Arial; color:#000000; background-color:#; border:1px; solid #000; vertical-align:top; overflow:hidden; }' + CCRLF + 'div { font:normal 0.6em Arial; color:#000080; background-color:#; border:1px; solid #000; vertical-align:top; overflow:hidden; }' + CCRLF + ''; CHTMLBEGIN = '' + CCRLF + '' + CCRLF + '' + CCRLF+ CHTMLCSS + CCRLF + 'Buchtitel
SELECT auf mehrere Tabellen (JOIN)
Beispiel: Alle Autor Name (Tabelle Autoren) und Titel (Tabelle Buecher) sortiert nach Autor Name ausgeben.
SQL-Befehl SELECT und Ergebnis:
SELECT sqlite_master
Die spezielle SQLite-Tabelle sqlite_master enthält alle Informationen über Tabellen, Indizes, Views, Trigger einer SQLite Datenbank.
Der SELECT-Befehl verwenden um Informationen aus der Tabelle sqlite_master zu lesen.
Das Ergebnis sind die Spalten type (table, index, view, trigger), name, tbl_name, rootpage und sql.
Beispiele anhand der Datenbank buecher.db
Alle Datensätze der Tabelle sqlite_master
SELECT * FROM sqlite_master;
Alle Tabellennamen der Tabelle sqlite_master
SELECT name FROM sqlite_master WHERE type="TABLE" ORDER BY name;
name
Autoren
Buecher
Log
sqlite_sequence
SELECT CAST ( Ausdruck AS Datentyp [ ( Länge ) ] )
CAST in SQLite konvertiert einen Ausdruck von einem Datentyp in einen anderen.
Beispiele
Die Tabelle sqlite_master enthält alle SQLite Datenbankinformationen, wie Tabellen, Indices, Views, Triggers.
Ausgabe Liste der Tabellentypen und Tabellenname:
Ohne Cast | Mit Cast |
---|---|
SELECT type, tbl_name FROM sqlite_master | SELECT type AS „Typ“, (CAST(tbl_name AS VARCHAR(10))) AS „Tabellen“ FROM sqlite_master |
![]() |
![]() |