Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TADODataSet - Fehler beim Hinzufügen (Identity Insert) (https://www.delphipraxis.net/197837-tadodataset-fehler-beim-hinzufuegen-identity-insert.html)

Piro 10. Sep 2018 14:23

Datenbank: MS SQL • Version: 2014 • Zugriff über: ADO

TADODataSet - Fehler beim Hinzufügen (Identity Insert)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin zusammen,

ich verwende folgenden Code, um einen Benutzer in eine Tabelle zu speichern.
Delphi-Quellcode:
DSData.Close;
DSData.CommandText := 'Select * from fehlteilelosreserve_access where id = -1';
DSData.Open;
DSData.Append;

DSData.FieldByName('lanid').AsString             := edt_setup_access_lanid.Text;
DSData.FieldByName('username').AsString          := edt_setup_access_name.Text;
DSData.FieldByName('access_lieferperformance').AsBoolean := cb_setup_access_lieferperformance.Checked;
DSData.FieldByName('access_admin').AsBoolean     := cb_setup_access_admin.Checked;
DSData.Post; // Hier kommt die Exception jetzt.
DSData.Close;
Ich bin von MS SQL 2008 auf MS SQL 2014 umgestiegen und musste gerade feststellen, dass mein Code nicht mehr funktioniert und ich jetzt folgende Fehlermeldung erhalte.
Siehe Anhang.

Wie gesagt, mit MS SQL 2008 ging es. Ich habe auch schon anstatt des Stern *, die Felder aufgezählt im Select CommandText. Auch leider ohne Erfolg.

Das Feld id ist der Primäre Key mit AutoIncrement.

Ich hoffe, dies Problem geht einer und weiß, was ich machen kann.

Danke im Voraus.
Sven

jobo 10. Sep 2018 14:32

AW: TADODataSet - Fehler beim Hinzufügen (Identity Insert)
 
Evtl. ist deine "dynamische" Herangehensweise mit "Select *" nicht mehr kompatibel mit Treiber oder Kompo.
Mittlerweile gibt es ja wohl für PK Attribute(Felder) Field Properties, mit denen man angeben kann, wie das PK Verhalten ist/sein soll.
Wenn Dein PK Feld die Migration so überlebt hat, wie es unter der alten Version war, sollte ein insert jedenfalls funktionieren, wenn Du das Feld einfach beim Insert weg lässt, also "aktiv" nicht angeben. Hast Du mal geschaut, ob das PK Feld noch wirklich als Autoinc definiert ist bzw. ob es funktioniert mit einer Eingabe aus der SQL Console?

Delphi.Narium 10. Sep 2018 14:36

AW: TADODataSet - Fehler beim Hinzufügen (Identity Insert)
 
Vergleiche bitte mal die Tabellenstrukturen auf den beiden Datenbanken.

Du weist der Spalte ID jedenfalls keinen Wert zu.

Wenn ID aber als Not Null definiert ist, muss das schief gehen.

Von welchem Typ ist denn ID auf der alten Datenbank und von welchem auf der neuen?

Gibt es auf der alten Datenbank eventuell einen Trigger, der das Befüllen der Spalte ID übernimmt und auf der neuen Datenbank fehlt?

Das Problem ist per "Ferndiagnose" nicht zu lösen, da es (vermutlich / höchstwahrscheinlich) an unterschiedlichen Tabellendefinitionen und / oder Triggern liegt.

Piro 10. Sep 2018 14:48

AW: TADODataSet - Fehler beim Hinzufügen (Identity Insert)
 
Ich habe schon mal herausgefunden, dass das Feld id nicht ReadOnly ist.

Ah. :evil: Bei der Migration sind die ganzen Primären Schlüssel flöten gegangen.

Ich werde die Migration der Tabellen nochmal machen und hoffe das es dann klappt. Wäre unschön, 3 Anwendungen umzuschreiben.

Piro 10. Sep 2018 15:06

AW: TADODataSet - Fehler beim Hinzufügen (Identity Insert)
 
Oh man :oops: das Problem war wirklich die Migration. Die Primären Schlüssel sind alle verloren gegangen.

Habe es korrigiert und siehe da, es geht wieder.

Sorry, dass ich eure Zeit verbraucht habe. Für das nächste Mal, weiß ich besser Bescheid.

Trotzdem danke und einen schönen Tag.


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