Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQLite Autoincrement Problem (https://www.delphipraxis.net/182288-sqlite-autoincrement-problem.html)

Kirchi 15. Okt 2014 12:13

Datenbank: SQLite • Version: 3 • Zugriff über: DevArt UniQuery

SQLite Autoincrement Problem
 
Ich habe ein kleines Problem mit SQLite.

ich habe eine Tabelle mit folgenden SQL-Statement erstellt:

Code:
CREATE TABLE "Prioritaeten" ("ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "Titel" varchar(255))
Leider erhalte ich aber wenn ich einen neuen Eintrag poste folgende Fehlermeldung:

Zitat:

Feld 'ID' muss einen Wert haben.
Hatte jemand auch schon mal dieses Problem und konnte es beheben?


:dp:

mkinzler 15. Okt 2014 12:22

AW: SQLite Autoincrement Problem
 
Wie sieht das Insert Statement aus?

Kirchi 15. Okt 2014 12:37

AW: SQLite Autoincrement Problem
 
Ursprünglich hatte ich diesen Code:

Delphi-Quellcode:
           dm.qry_Kategorie.Append;
           dm.qry_KategorieTitel.Value:=cbb_Kategorie.Text;
           dm.qry_Kategorie.Post;
Bei diesem ist der Fehler erschienen.

Nachdem ich es auf folgenden Code geändert haben funktioniert es.

Delphi-Quellcode:
            dm.qry_Kategorie.SQL.Clear;
            dm.qry_Kategorie.SQL.Add('Insert into Kategorien ("Titel") Values ("'+cbb_Kategorie.Text+'")');
            dm.qry_Kategorie.ExecSQL;
Danke trotzdem.

AlexII 15. Okt 2014 13:38

AW: SQLite Autoincrement Problem
 
Anstelle der ID muss Du NULL einfügen, siehe Beispiel:

Delphi-Quellcode:
SQLQueryCategory.Close;
SQLQueryCategory.SQL.Text := 'INSERT INTO tbcategory VALUES(NULL, :category)';
SQLQueryCategory.ParamByName('category').AsString := CategoryComboBox.Text;
SQLQueryCategory.ExecSQL;
SQLTransaction1.Commit;
Bei Dir muss es dann ungefähr so aussehen:

Delphi-Quellcode:
 dm.qry_Kategorie.SQL.Add('Insert into Kategorien ("ID", "Titel") Values (NULL, "'+cbb_Kategorie.Text+'")');

Sir Rufo 15. Okt 2014 16:56

AW: SQLite Autoincrement Problem
 
@AlexII
Mit dem SQl-Statement hat er keine Probleme.

@Kirchi
Das Problem liegt wohl daran, dass die Query-Komponente erkennt, dass das Feld benötigt (required) wird aber eben nicht erkennt dass es sich um ein AutoInc Feld handelt.

Das kann man der UniDAC Query auf verschiedene Arten beibringen:
  • Erstelle ein Insert-Statement für die Query
  • Füge alle Felder der Feldliste hinzu und setze das Feld auf AutoInc (geht aber auch per RunTime)

norwegen60 20. Jan 2017 13:17

AW: SQLite Autoincrement Problem
 
Ich hatte das Problem gerade als ich ein TUniQuery manuell erstellt habe und dann per SQL ein Insert oder per Query.Insert Werte hinzufügen wollte. Die ID hat er noch erkannt dass die von der DB vergeben wird. Nicht aber bei der Spalte Rowguid, die für Replikationen benötigt wird.

Nachdem ich
Delphi-Quellcode:
   dbQuery := TUniQuery.Create(NIL);
   dbQuery.Connection := dbConnection;
   dbQuery.Options.RequiredFields := false; // Verhindert "Feld muss einen Wert haben"
gesetzt habe, geht es auch dor

Gerd


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 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