![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: libsql
libSQL und SQlite
Hallo Freunde,
ich habe ein Probelm mit der Verwendung von libsql in verbindung mit sqlite3. Ich bin noch neu in Delphi und benötige hier einen Tip da ich nichts finde das es mir so erklärt damit ichs auch verstehe. Die Suche hat mich auch nicht weitergebracht. Referenz hab ich auch keine wirklich brauchbare gefunden was ich sehr schade finde, es gibt sehr viel gute Dinge für Delphi nur die Referenzen sind sehr sehr schlecht für Anfänger. Also zurück zum Probelm. Ich habe ein Form erstellt, auf diesem habe ich mit ein TLiteDB gezogen. Anschliessend habe ich 4 Editfelder erstellt und einen Button hinzugefügt. Dan kam ich zur Datenbank, diese habe ich mit SQLite Administrator erstellt (Sehr praktisches Programm).
SQL-Code:
So nun habe ich im FormCreate eine Instanz der DB Klasse erstellt.
CREATE TABLE "kunden" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "name" VARCHAR(60) NOT NULL, "leistung" vARCHAR(60) NOT NULL, "dokumente" inTEGER NOT NULL, "datum" INTEGER DEFAULT 'CURRENT_TIMESTAMP' NOT NULL );
Delphi-Quellcode:
Anschliessend habe ich im Button ein Query erstellt das mir einen Datensatz in die DB einfügen soll.
procedure TForm1.FormCreate(Sender: TObject);
begin //Datenbankverbindung erstellen db:=TLiteDB.Create(Self, 'database.s3db'); end; end.
Delphi-Quellcode:
Wenn ich das nun ausführe bekomme ich immer einen Fehler:
procedure TForm1.Button1Click(Sender: TObject);
begin if not DB.Query ('insert into kunden (name, leistung, dokumente) values (' + Edit1.Text + ', ' + Edit2.Text +' , ' + Edit3.Text + ') ') then ShowMessage('DB error: '+ DB.ErrorMessage); db.Free; end; No such column: Edit1 Warum bekomme ich diesen Fehler, das Feld wird ja durch die Felder vorher definiert, also name, leistung, dokumente und hinten sind ja nur die Values drin. Ich kapiere das Libsql nicht ganz und eine gute Referenz hab ich eben nicht gefunden. Vielleicht wäre jemand so nett und könte mir kurz erklären woran das liegt. Vielen Dank für die Hilfe SM |
Re: libSQL und SQlite
Herzlich willkommen in der Delphi-PRAXiS, sexmagic.
Wenn du dir das erzeugte SQL-Statement vor der Ausführung angeschaut hättest, dann wäre dir vielleicht aufgefallen, dass der Default-Inhalt von Edit1 ohne die notwendigen Hochkommata eingefügt wurde - soll aber als Literal übergeben werden:
Delphi-Quellcode:
Getippt und nicht getestet.
procedure TForm1.Button1Click(Sender: TObject);
const ins = 'insert into kunden (name, leistung, dokumente) ' + 'values (%s, %s, %d)' ; var stmt: String; n: Integer; begin n := StrToIntDef(Edit3.Text, 0); stmt := Format(ins, [QuotedStr(Edit1.Text), QuotedStr(Edit1.Text), n]); if not DB.Query (stmt) then ShowMessage('DB error: '+ DB.ErrorMessage); db.Free; end; Freundliche Grüße vom marabu |
Re: libSQL und SQlite
Super ich bin auch zu blöd, warum hab ich mir das das SQL nicht als String ausgeben lassen!!!
QuotedStr funktioniert alles super. Vielen herzlichen Dank für deine schnelle hilfe! grüsse SM |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz