id füllst Du mit einem Leerstring. Aber als INTEGER Autoincrement definiert, also NULL oder garnichts angeben
Delphi-Quellcode:
' VALUES ' +
'(NULL, ''' +
Würde aber 1) mit Parametern arbeiten (die QuoteOrgie ist ja schrecklich) oder wenigstens mit QuotedStr()
und 2) auf CaseSensitive Tabellen/Feldnamen verzichten
Delphi-Quellcode:
try
Zqry.SQL.Text := '
CREATE TABLE IF NOT EXISTS product (' +
'
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,' +
'
producer TEXT NOT NULL,' +
'
name TEXT NOT NULL,' +
'
category TEXT NOT NULL,' +
'
wohnort TEXT NOT NULL,' +
'
size INTEGER NOT NULL' + '
);';
Zqry.ExecSql;
[...]
Zqry.SQL.Text := '
INSERT INTO product ' +
'
(id, producer, name, category, wohnort, size)' +
'
VALUES(NULL, :producer, :name, :category, :wohnort, :size);';
ZQry.ParamByName('
producer').AsString := '
Firma GmbH';
ZQry.ParamByName('
name').AsString := '
Max Mustermann';
ZQry.ParamByName('
category').AsString := '
Software-Entwicklung';
ZQry.ParamByName('
wohnort').AsString := '
10000 Berlin';
ZQry.ParamByName('
size').AsInteger := 4711;
Zqry.ExecSql;
//SQL-Statement ausführen
Den Vorteil von Parametern solltest Du sehen. Zusätzlich kannst den Code universell umbauen
Delphi-Quellcode:
procedure MyInsert(producer, name, category, wohnort: String; size : Integer);
begin
[...]
Zqry.SQL.Text := 'INSERT INTO product ' +
'(id, producer, name, category, wohnort, size)' +
' VALUES(NULL, :producer, :name, :category, :wohnort, :size);';
ZQry.ParamByName('producer').AsString := producer;
ZQry.ParamByName('name').AsString := name;
ZQry.ParamByName('category').AsString := category;
ZQry.ParamByName('wohnort').AsString := wohnort;
ZQry.ParamByName('size').AsInteger := size;
[...]
end;
Dann denk' nochmal über Dein Denglish nach
Innerhalb Delphi Bezeichner und CO am liebsten in Englisch. Tabelle/FeldName darf aber Deutsch sein (seltener Namenskonflikte). Nur dann bitte ganz in deutsch: Produzent, Name, Kategorie, Wohnort, Groesse
PS: Name ist schon so ein ungünstigstes Wort... nehme da gerne Firmenname, Vorname, Nachname oder was passt, dann umgeht man einen evtl. Konflikt mit dem englischen name, das schon oft als Bezeicher genommen wird..