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