Home » Tutorials » Datenbanken » SQLite3 mit Delphi und dbExpress

SQLite3 mit Delphi und dbExpress

Anhang

Fehlermeldungen und Abhilfe (unvollständige Liste!)

Eine unvollständige Liste von SQLite Fehlermeldungen (Englisch/Deutsch) mit Ursache und Abhilfe.
Hinweis: In der SQLite-Quellcode-Datei sqlite3.c sind Fehlercodes und Hinweise kurz beschrieben.
Vgl.

#define SQLITE_OK 0 /* Successful result */

/* beginning-of-error-codes */

#define SQLITE_ERROR 1 /* SQL error or missing database */

...

Meldung Ursache Abhilfe
Sqlite3.dll not found Die notwendige DLL-Datei sqlite3.dll konnte nicht im Pfad gefunden werden. Sqlite3.dll entweder im Projekt / Anwendungs-Verzeichnis oder Windows System32 Verzeichnis kopieren.
Wenn sqlite3.dll nicht vorhanden ist, dann Download SQLite.org.
No such table: TABELLE Ausführung SQL-Befehl: Die Tabelle TABELLE ist in der Datenbank nicht vorhanden. Tabelle TABELLE erstellen oder SQL-Befehl ändern. Welche Tabellen in einer SQLite Datenbank enthalten sind, kann mittels PRAGMA table_info(TABALLE) ermittelt werden.
Operation not allowed on a unidirectional dataset Meldung erscheint zum Beispiel wenn versucht wird ein SQLDataset mit einem DBGrid zu verbinden.
Ein SQLDataset ist ein „unidirectionales“ Dataset, welches Datensätze nur in eine Richtung transportieren kann. Ein DBGrid kann Datensätze in beide Richtungen transportieren. Daher kann ein SQLDataset nicht direkt mit einem DBGrid verbunden werden.

Verwende DBGrid > DataSource > ClientDataset > DatasetProvider > SQLDataset > SQLConnection.

Siehe SQLite Datenbank Datensätze im DBGrid (Direkt)

Unable to open database file Datenbank wurde nicht gefunden. SQLConnection Parameter auf False setzen:
SQLConnection1.Params.Values[‚FailIfMissing‘] := ‚False‘;
oder
Datenbankname prüfen.

Zusammenfassung einiger SQL-Befehle (Beispiele)

Verwendete Variable:

// Ergebnis SQL-Befehl SELECT, PRAGMA in TDataset speichern
Var FDLSQLResults: TDataSet;
// SQL-Befehl ausgeführt mittels SQLConnection.Execute
Var LSQL: String;

Tabelle Buecher erstellen, vorher löschen (falls vorhanden):

LSQL := 'DROP TABLE IF EXISTS Buecher';
SQLConnection.Execute(LSQL, NIL);
LSQL := 'CREATE TABLE Buecher (BuchID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Titel VARCHAR(100) NOT NULL, AutorID INTEGER, ISBN VARCHAR(20));';
SQLConnection.Execute(LSQL, NIL);

Buecher hinzufügen:

LSQL := 'INSERT INTO Buecher (Titel, ISBN) VALUES ("Titel 1","ISBN1") ';
SQLConnection.Execute(LSQL, NIL);
SQLConnection.Execute(LSQL, NIL);

Buchtitel aktualisieren:

LSQL := 'UPDATE Buecher SET Titel="Buchtitel 2", ISBN="ISBN 2-2" WHERE Titel="Titel 2"';
SQLConnection.Execute(LSQL, NIL);

Alle Buecher zeigen. Ergebnis in TDataSet FDLSQLResults:

LSQL := 'SELECT * FROM Buecher;';
SQLConnection.Execute(LSQL, NIL, FDLSQLResults);

Und weitere…:

CREATE UNIQUE INDEX idx_isbn ON Buecher (isbn)
DROP INDEX idx_isbn
CREATE VIEW AlleBuecher AS SELECT * FROM Buecher
DROP VIEW AlleBuecher

Spezielle PRAGMA Befehle, wie Tabellenstruktur der Tabelle Buecher auflisten:

PRAGMA Table_Info(Buecher);

Referenz Beispieldatenbank Buecher.db SQL-Befehle

DROP TABLE IF EXISTS Autoren;
CREATE TABLE Autoren (AutorID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Name VARCHAR(40), Beschreibung VARCHAR(255), Homepage VARCHAR(100));

DROP TABLE IF EXISTS Buecher;
CREATE TABLE Buecher (BuchID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Titel VARCHAR(100) NOT NULL, AutorID INTEGER, ISBN VARCHAR(20));

DROP TABLE IF EXISTS Log;
CREATE TABLE Log (LogID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Datum VARCHAR(20) NOT NULL, Info VARCHAR(255) NOT NULL);

DROP TRIGGER IF EXISTS Buecher_I;
CREATE TRIGGER Buecher_I AFTER INSERT ON Buecher
BEGIN
INSERT INTO Log(Datum, Info)
VALUES (DATETIME('now'), 'Neu: ' || new.Titel);
END;

DROP TRIGGER IF EXISTS Buecher_U;
CREATE TRIGGER Buecher_U AFTER UPDATE ON Buecher
BEGIN
INSERT INTO Log(Datum, Info)
VALUES (DATETIME('now'), 'Geändert: ' || old.Titel || ' auf ' || new.Titel);
END;

DROP TRIGGER IF EXISTS Buecher_D;
CREATE TRIGGER Buecher_D AFTER DELETE ON Buecher
BEGIN
INSERT INTO Log(Datum, Info)
VALUES (DATETIME('now'), 'Gelöscht: ' || old.Titel);
END;

INSERT INTO Autoren (AutorID,Name) VALUES (NULL,'Hannes Nygaard');
INSERT INTO Autoren (AutorID,Name) VALUES (NULL,'Derek Meister');
INSERT INTO Autoren (AutorID,Name) VALUES (NULL,'Adler Olsen');
INSERT INTO Buecher (BuchID,Titel,AutorID,ISBN) VALUES (NULL,'Schwere Wetter',1,'978-3897059207');
INSERT INTO Buecher (BuchID,Titel,AutorID,ISBN) VALUES (NULL,'Nebelfront',1,'978-3954510269');
INSERT INTO Buecher (BuchID,Titel,AutorID,ISBN) VALUES (NULL,'Flutgrab',2,'978-3442376476');
INSERT INTO Buecher (BuchID,Titel,AutorID,ISBN) VALUES (NULL,'Knochenwald',2,'978-3442379323');
INSERT INTO Buecher (BuchID,Titel,AutorID,ISBN) VALUES (NULL,'Verachtung',3,'978-3423280020');
INSERT INTO Buecher (BuchID,Titel,AutorID,ISBN) VALUES (NULL,'Erlösung',3,'978-3423248525');

SELECT Autoren.Name,Buecher.Titel FROM Autoren, Buecher WHERE Autoren.AutorID=Buecher.AutorID;
SELECT Buecher.BuchID,Buecher.Titel,Buecher.AutorID, Autoren.Name,Buecher.ISBN FROM Autoren, Buecher WHERE Autoren.AutorID = Buecher.AutorID