![]() |
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 |
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.
|
Re: Autoincrement funktioniert nicht ???
Zitat:
|
Re: Autoincrement funktioniert nicht ???
Hallo,
Zitat:
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? |
Re: Autoincrement funktioniert nicht ???
Zitat:
|
Re: Autoincrement funktioniert nicht ???
In diesem Fall könnte man auch mit einer Sequenz arbeiten (Client holt sich Wert und fügt ihn ein)
|
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. |
Re: Autoincrement funktioniert nicht ???
Setz mal bei dem Feld die Spalteneigenschaft '(Ist-Identity)' auf 'Ja' und den Datentyp auf Int. Das sollte reichen.
|
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)' ? |
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'. |
Re: Autoincrement funktioniert nicht ???
Liste der Anhänge anzeigen (Anzahl: 1)
Klar, dass hatte ich schon (habe immer in Delphi gesucht ...)
|
Re: Autoincrement funktioniert nicht ???
Liste der Anhänge anzeigen (Anzahl: 1)
Sieht bei mir etwas anders aus, habe den vollen Server hier. Bei mir reichen diese Einstellungen, damit die Datenbank selbst eine Nummer einfügt.
|
Re: Autoincrement funktioniert nicht ???
Liste der Anhänge anzeigen (Anzahl: 1)
Dann liegt mein Fehler ganz klar doch im Delphi.
Wie hast du denn deine Verbindung zu rDatenbank hergestellt ? Auch über TSQLConnection - TSimpleDataset - TDataSource - TDBGrid - TDBNavigator |
Re: Autoincrement funktioniert nicht ???
Bei Nr_Kunde steht "Null zulassen" = Nein bzw. ist kein Häckchen gesetzt.
Das wäre zumindest was ich gemeint hatte, hier NULL zulassen. |
Re: Autoincrement funktioniert nicht ???
Ich bevorzuge die Ado-Komponenten.
Delphi-Quellcode:
Glaube aber nicht das es an den Komponenten von Delphi liegt, denke eher die Fehlermeldung wird von der Datenbank erzeugt und zurück zum Programm geschickt.var ado_connection : TAdoConnection; ado_query : Tadoquery; begin ado_connection := TAdoConnection.Create(NIL); ado_connection.ConnectionString := 'Provider=' + DB_provider + ';' + 'Password=' + DB_password + ';' + 'Persist Security Info=' + DB_security + ';' + 'User ID=' + DB_user + ';' + 'Initial Catalog=Master;' + 'Data Source=' + DB_datasource; ado_connection.LoginPrompt := false; ado_connection.Connected := true; ado_query := Tadoquery.create(NIL); ado_query.Connection := ado_connection; ado_query.SQL.add('select * from kunden;'); ado_query.Open; |
Re: Autoincrement funktioniert nicht ???
Mal anderes herum. Wennn du dir die Tabelle im "MS SQL Server Management Studio Express" anzeigen läßt und Datensätze hinzufügst, wird dann automatisch die Nummer vergeben?
|
Re: Autoincrement funktioniert nicht ???
Das geht doch aber nicht, ist ja ein Primärschlüssel
|
Re: Autoincrement funktioniert nicht ???
Ja, im Management studio funktioniert alles wunderbar.
Deshalb kann es ja nur irgendeine Kleinigkeit im Delphi sein |
Re: Autoincrement funktioniert nicht ???
So, nun versuche ich es auch einmal mit TADO.
Aber da kommt schon das nächste Problem auf mich zu. Ich habe ja MSSQL 2005 express. Welcher Provider ist dafür der Richtige ? Irgendwie klappt es mit keinem mich an der Datenbank einzuloggen. Dabei ist Fr, der 13. doch schon vorbei ?! |
Re: Autoincrement funktioniert nicht ???
Hallo,
Zitat:
Auf dem zweiten Reiter (Verbindung) muss man unter 1. zuweilen Rechnername oder IP-Adresse eingeben, da hier nicht immer alle verfügbaren SQL-Server aufgelistet werden. |
Re: Autoincrement funktioniert nicht ???
So, nun funktioniert es. Es war wohl Gestern schon zu spät.
Hatte einen Fehler im connection string. Im Data Sourde schaute der Backslash in die falsche Richtung.
Delphi-Quellcode:
Nach dem das dann ging, war der Rest erfreulich einfach.
object ADOConnection1: TADOConnection
Connected = True ConnectionString = 'Provider=SQLNCLI.1;Integrated Security=SSPI;Persist Security Inf' + 'o=False;Initial Catalog=KalkulationsDaten;Data Source=MY_PC-1\SQLEXPRESS' LoginPrompt = False Provider = 'SQLNCLI.1' Left = 50 Top = 255 end TADOTable, TADOQuery, TDataSource, TDBGrid, TDBNavigator verknüpft und schon spielt alles. Meine Tabellenschlüssel werden auch automatisch incrementiert. So wie es sein soll. Vielen Dank für eure gedultige Hilfe. In manch anderen Foren wird man ja als unwissender richtig fertig gemacht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz