Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi libSQL und SQlite (https://www.delphipraxis.net/77751-libsql-und-sqlite.html)

sexmagic 24. Sep 2006 13:11

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:
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
);
So nun habe ich im FormCreate eine Instanz der DB Klasse erstellt.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  //Datenbankverbindung erstellen
  db:=TLiteDB.Create(Self, 'database.s3db');
end;

end.
Anschliessend habe ich im Button ein Query erstellt das mir einen Datensatz in die DB einfügen soll.
Delphi-Quellcode:
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;
Wenn ich das nun ausführe bekomme ich immer einen Fehler:
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

marabu 24. Sep 2006 13:44

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:
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;
Getippt und nicht getestet.

Freundliche Grüße vom marabu

sexmagic 24. Sep 2006 14:31

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 15:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz