AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQLite AUTOINCREMENT Error mit UniDac TUniQuery

SQLite AUTOINCREMENT Error mit UniDac TUniQuery

Ein Thema von dstein · begonnen am 15. Sep 2021 · letzter Beitrag vom 17. Sep 2021
Antwort Antwort
dstein

Registriert seit: 28. Jul 2005
Ort: Dormagen
14 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

SQLite AUTOINCREMENT Error mit UniDac TUniQuery

  Alt 15. Sep 2021, 09:09
Datenbank: SQLite • Version: 3.35.5 • Zugriff über: Unidac TUniQuery
Beim Erstellen einer kleinen Windows 32-Bit App mit SQLite als Daba erhalte ich eine Fehlermeldung.
Wenn per dbNavigator ein Insert ausgeführt wird und dbNavigator POST gespeichert wird, erfolgt die Fehlermeldung.
Im Projekt XYZ ist eine Exception der Klasse EDatabaseError mit der Meldung FEld IDNR muss einen Wert haben aufgetreten.

Siehe: DebuggerException.png

Das ärgerliche für mich, ich habe vor 2020 mehrere auf SQLite basierende Apps geschrieben, welche auch jetzt noch ohne Problem funktionieren. Doch alle aktuellen Projekte erzeugen den gleichen Fehler.
Ich habe diverse Einstellungen und Versionen von unidac75d25proV7.5.13 bis zur aktuellen unidac_9.0.1_d25pro Version ausprobiert. Ebenso unterschiedliche sqlite3.dll (sqlite3_3.23.1.dll, sqlite3_3.35.5.dll, sqlite3_3.8.10.2.dll) Versionen in Kreuzversuche ausprobiert. Nach Wochen des ausprobieren, gebe ich auf, ich finde die Ursache oder falschen Parameter, für die Fehlermeldung nicht.
DevUmgebung:
• Delphi 10.2.3 2631 Tokyo Enterprise Build 2004 (11.03.2018), Delphi 10.2 Release 3
• Universal Data Access Components, UniDac Professional License
• SQLite.dll Version 3.35.5

Um Querverhalten zu minimieren, habe ich beiliegende Testapp als absolutes simple Projekt geschrieben.
Siehe: AppError.png

Die App erstellt eine SQLite Datenbank (vorhandene wird vorher gelöscht) und erzeugt per TUniScript eine Tabelle mit zwei Feldern, Index und füllt die Tabelle mit zwei Datensätze.
CREATE TABLE Test (
IDNR INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,
Betreff VARCHAR (100) COLLATE NOCASE);
CREATE INDEX pkIDNR ON Test (IDNR ASC);
INSERT INTO Test (Betreff) VALUES ('Betreff 11');
INSERT INTO Test (Betreff) VALUES ('Betreff 22');

Da per Script „INSERT INTO Test (Betreff) VALUES ('Betreff 11');“ ein Datensatz mit AUTOINCREMENT Wert angelegt werden kann, funktioniert die Datenbank und INCREMENT Methode wohl.

Zugriff auf die Tabelle erfolgt mit TUniQuery. Wobei mit SQL Generator das Insert Script anders ist als bei MS SQL.

// SQLite
INSERT INTO Test
(IDNR, Betreff)
VALUES
(:IDNR, :Betreff)

// MS SQL
INSERT INTO dbo.Test
(Betreff)
VALUES
(:Betreff)
SET :IDNR = SCOPE_IDENTITY()

Aber warum funktioniert das simple Insert per dbNavigator nicht. Beim Vergleichen von alten SQL-InsertSource und aktuellen SQL-InsertSource konnte ich keinen Unterschied feststellen.
Hat jemand eine Idee wo mein Denkfehler oder fehlender Parameter liegt?
Angehängte Dateien
Dateityp: zip Source1.zip (571,2 KB, 1x aufgerufen)
Dateityp: zip ErrorProjectEXE.zip (2,07 MB, 0x aufgerufen)
Dirk
- Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
(Seneca, röm. Dichter u. Phil., 4 v. Chr. - 65 n.Chr.) -

Geändert von dstein (15. Sep 2021 um 09:17 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.963 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: SQLite AUTOINCREMENT Error mit UniDac TUniQuery

  Alt 15. Sep 2021, 11:02
Ich habe mir die angehängten Dateien nicht runtergeladen.

Wieso übergibst Du für SQLite eine ID, obwohl Du sie in der DB per Autoincrement erzeugst?
In der MS SQL Variante machst Du es m.E. richtig.

Wie der Auto Wert zurück geholt wird nach dem Insert, ist ja evtl. wieder System spezifisch. Wobei ich zumindest dem Lesen nach den Eindruck habe, dass aktuelle Delphi Komponenten hier eine Menge Einstellmöglichkeiten bieten und viel unter der Haube machen. Hier liegt vielleicht auch das Problem. Wenn es früher immer funktioniert hat, ist es nun mit aktuelleren Komponenten problematisch, weil sie es genauer behandeln und auf ein unglückliches Grundkonstrukt stoßen.
Gruß, Jo
  Mit Zitat antworten Zitat
dstein

Registriert seit: 28. Jul 2005
Ort: Dormagen
14 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: SQLite AUTOINCREMENT Error mit UniDac TUniQuery

  Alt 17. Sep 2021, 09:26
ich glaube die Ursache gefunden zu haben.
Die Option Required im IDNR Feld muß False sein!

UniQuery1->Options->RequiredFields = false;

Zumindest ist die Fehlermeldung weg und das AUTOINCREMENT funktioniert.
Das ist anders als beim MS SQL-Provider.
Miniaturansicht angehängter Grafiken
not_required.png  
Dirk
- Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
(Seneca, röm. Dichter u. Phil., 4 v. Chr. - 65 n.Chr.) -
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf