Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Autoincrement funktioniert nicht ??? (https://www.delphipraxis.net/129338-autoincrement-funktioniert-nicht.html)

myownshadow 17. Feb 2009 10:53

Datenbank: MSSQL Express • Version: 2005 • Zugriff über: DBExpress

Autoincrement funktioniert nicht ???
 
Hallo !
Ich habe eine MSSQL Datenbank mit dem "MS SQL Server Management Studio Express" erstellt und möchte die nun bearbeiten.

Ich habe mit TSQLConnection eine Verbindung zur Datenbank hergestellt, funktioniert. Anschließend schau ich mit TSimpleDataSet auf eine Tabelle und möchte den Inhalt über TDatasource in einem TDBGrid darstellen.
Zur Navigation benutze ich dan TDBNavigator.
So weit so gut.

Immer wenn ich mit dem TDBNavigator einen neuen Datensatz erzeuge und später speichern will, erhalte ich eine Exception, da das Feld meines PrimSchlüssels leer ist.
Aber müsste der sich denn nicht selbst incrementieren ? Oder muss ich das selbst tun ?

Wenn ich mit dem Management Studio einen neuen Datensatz anlege, funktioniert das autoincrement immer.

Vielen dank

Satty67 17. Feb 2009 11:10

Re: Autoincrement funktioniert nicht ???
 
Also bei FB ist das ja etwas anders... Hat das Autoinc Feld auch noch den Wert "NOT NULL"? Normalerweise das Autoinc Feld nicht als Pflichtfeld definieren (damit man es weglassen kann), da ja erst hinterher von der DB-Engine ein Wert eingesetzt wird.

mkinzler 17. Feb 2009 11:13

Re: Autoincrement funktioniert nicht ???
 
Zitat:

Also bei FB ist das ja etwas anders... Hat das Autoinc Feld auch noch den Wert "NOT NULL"? Normalerweise das Autoinc Feld nicht als Pflichtfeld definieren (damit man es weglassen kann), da ja erst hinterher von der DB-Engine ein Wert eingesetzt wird.
Die automatische Füllung hat nichts mit NOT NULL zu tun. Wird es serverseitig automatisch gefüllt, darf es u.U. auf dem Client nicht gefüllt werden

nahpets 17. Feb 2009 11:17

Re: Autoincrement funktioniert nicht ???
 
Hallo,
Zitat:

Zitat von myownshadow
Hallo !
Ich habe eine MSSQL Datenbank mit dem "MS SQL Server Management Studio Express" erstellt und möchte die nun bearbeiten.

Ich habe mit TSQLConnection eine Verbindung zur Datenbank hergestellt, funktioniert. Anschließend schau ich mit TSimpleDataSet auf eine Tabelle und möchte den Inhalt über TDatasource in einem TDBGrid darstellen.
Zur Navigation benutze ich dan TDBNavigator.
So weit so gut.

Immer wenn ich mit dem TDBNavigator einen neuen Datensatz erzeuge und später speichern will, erhalte ich eine Exception, da das Feld meines PrimSchlüssels leer ist.
Aber müsste der sich denn nicht selbst incrementieren ? Oder muss ich das selbst tun ?

Wenn ich mit dem Management Studio einen neuen Datensatz anlege, funktioniert das autoincrement immer.

Vielen dank

aufgrund der Fehlerbeschreibung vermute ich, dass der Client nicht weiß, dass der Primärschlüssel erst von der Datenbank gefüllte wird und deshalb das Fehlen des Wertes bemängelt.

Was passiert, wenn Du für den Primärschlüssel einen Wert eingibst, wird der dann gespeichert oder wird der Wert gespeichert, den die Datenbank automatisch vergibt oder erhälst Du von der Datenbank eine Fehlermeldung, dass für das Feld kein Wert eingegeben werden darf?

Satty67 17. Feb 2009 11:22

Re: Autoincrement funktioniert nicht ???
 
Zitat:

Zitat von mkinzler
Die automatische Füllung hat nichts mit NOT NULL zu tun. Wird es serverseitig automatisch gefüllt, darf es u.U. auf dem Client nicht gefüllt werden

Ja, aber er lässt ja das Feld absichtlich leer. Dachte also das die DB erstmal einen Wert erwartet (weil definiert), ohne zu Wissen, dass es sowieso später gefüllt wird. Somit einfach Pflichtfeld entfernen und Problem gelöst?

mkinzler 17. Feb 2009 11:23

Re: Autoincrement funktioniert nicht ???
 
In diesem Fall könnte man auch mit einer Sequenz arbeiten (Client holt sich Wert und fügt ihn ein)

myownshadow 17. Feb 2009 12:30

Re: Autoincrement funktioniert nicht ???
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zunächst vielen Dank für die schnellen Antworten.

Zunächst habe ich auch selbst einen Wert eingegeben, aber dann beschwert sich die Datenbank mit einem "EDatabaseError" darüber, das ich dies tue.

So, nun habe ich im TSimpleDataSet das faRequired auf false gesetzt (so war es doch gemeint, nicht wahr ?).
Die Fehlermeldung "EDatabaseError" bleibt jedoch erhalten.

chericks 17. Feb 2009 12:43

Re: Autoincrement funktioniert nicht ???
 
Setz mal bei dem Feld die Spalteneigenschaft '(Ist-Identity)' auf 'Ja' und den Datentyp auf Int. Das sollte reichen.

myownshadow 17. Feb 2009 13:02

Re: Autoincrement funktioniert nicht ???
 
Schwierige Geburt....
InTSimpleDataSet.FieldDefs habe ich den DataType auf ftInteger bzw. auch einmal auf ftAutoInc gesetzt.

Beides ändert leider nichts.

Wo finde ich aber die Spalteneigenschaft '(Ist-Identity)' ?

chericks 17. Feb 2009 13:35

Re: Autoincrement funktioniert nicht ???
 
Hätte ich auch mit reinschreiben sollen...

Meinte im "MS SQL Server Management Studio Express" die Tabelle auswählen, rechte maustaste auf die Tabelle, und im Popupmenü auf "ändern". Das Feld auswählen,Datentyp auf Int und unten in der Liste dann halt '(Ist-Identity)' auf 'Ja'.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr.
Seite 1 von 3  1 23      

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