Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Insert bei MSSQL und Autoinc (https://www.delphipraxis.net/156018-insert-bei-mssql-und-autoinc.html)

Hansi 16. Nov 2010 22:23

Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO

Insert bei MSSQL und Autoinc
 
Hallo,

Ich bin etwas am verzeifeln; normalerweise arbeite ich mit MySQL; In diesem kleinen Projekt aber mit MSSQL und da scheint einiges anders zu sein.
Ich möchte ein einfaches Insert in Tab1 machen. Das erste Feld der Tab1 ist ein Autoincrement das nicht Null ist laut DB-Einstellungen. Nur sagt er mir dauernd ich darf dem Feld nicht NULL zuweisen, dabei spreche ich das Feld gar nicht an.
Delphi-Quellcode:
INSERT INTO Tab1 (Feld2, Feld3) Values (:p2, :p3)
Feld1 ist das Autoincrement Feld.

Was mache ich da falsch?

alzaimar 16. Nov 2010 22:25

AW: Insert bei MSSQL und Autoinc
 
AutoInc-Felder dürfen nicht beschrieben werden.

Hansi 16. Nov 2010 22:27

AW: Insert bei MSSQL und Autoinc
 
hallo,

nein das mach ich ja auch nicht; Ich beschreibe Feld 2 und 3 und nicht Feld1 (autoinc).
Oder wie meinst du das?

Satty67 16. Nov 2010 22:28

AW: Insert bei MSSQL und Autoinc
 
Muss aber beim Insert trotzdem angegeben werden?

SQL-Code:
INSERT INTO Tab1 (Feld1,Feld2, Feld3) Values (NULL, :p2, :p3)

mkinzler 16. Nov 2010 22:31

AW: Insert bei MSSQL und Autoinc
 
Zitat:

Muss aber beim Insert trotzdem angegeben werden?
Normalerweise nicht
SQL-Code:
INSERT INTO Tab1 (Feld2, Feld3) Values (:p2, :p3);

Satty67 16. Nov 2010 22:36

AW: Insert bei MSSQL und Autoinc
 
Hat er das nicht so probiert (bis auf den Term)?

Dachte NOT NULL Felder müssen beim Insert angegeben werden und da AUTOINC als Wert NULL? Bin aber auch nicht sicher...

Hansi 16. Nov 2010 22:36

AW: Insert bei MSSQL und Autoinc
 
nein NULL darf das autoinc Feld ja nicht haben.

Anscheinend braucht die DB eine Info zähle das Feld1 um eins hoch und schreibe dann den Wert rein. Wobei das kann ja auch nicht sein, oder?

Satty67 16. Nov 2010 22:39

AW: Insert bei MSSQL und Autoinc
 
Zitat:

Zitat von Hansi (Beitrag 1062046)
nein NULL darf das autoinc Feld ja nicht haben.

Ausprobiert? ;) (Erklärung warum siehe oben)

Aber laut mkinzler (der sich mit am besten hier mit SQL auskennt) liege ich nicht ganz richtig mit meiner Vermutung.

Hansi 16. Nov 2010 22:43

AW: Insert bei MSSQL und Autoinc
 
hmmm

in mysql geht das so: INSERT INTO Tab1 (Feld2, Feld3) Values (:p2, :p3)

Die Frage ist nur warum das in MSSQL nicht tut und wie ich es machen muss. hmmm

mkinzler 16. Nov 2010 22:54

AW: Insert bei MSSQL und Autoinc
 
Poste mal die Deklaration. Der autoinc scheint nicht anzuspringen.

Bummi 16. Nov 2010 22:56

AW: Insert bei MSSQL und Autoinc
 
der sql ist korrekt und unproblematisch, Du hast wahrscheinlich veröffentlicht Feldkomponenten die Dir hier in die Quere kommen.
Bei MSSQL-Server nie Client-und Serversitige Cursor mischen auf einer Connection, weise der veröffentlichten Feldkomponente mal required:=false zu.

Hansi 16. Nov 2010 23:03

AW: Insert bei MSSQL und Autoinc
 
Typ BigInt
Aktiviert sind die Haken Not NULL, eindeutiger Schlüssel, Primärschlüssel.
Identität ist nicht aktiviert (ist das richtig so; da steht nämlich was von Erhöhung?!?)

Hansi 16. Nov 2010 23:04

AW: Insert bei MSSQL und Autoinc
 
Hall Bummi,

Was meinst du mit Cursor und Feldkomponente? Kannst du mir bitte ein Bsp geben?

Bummi 16. Nov 2010 23:05

AW: Insert bei MSSQL und Autoinc
 
Identität ist das Schlüsselwort für Autoincrement
EDIT
der Fehler liegt mkinzler schon vermutete in der Datenbank.
Du kannst die Oberfläche erst mal vergessen.

Hansi 16. Nov 2010 23:24

AW: Insert bei MSSQL und Autoinc
 
hallo,

ich habe das Feld Identität in der DB aktiviert und nun geht es; hoffe nur dass daurch keine neuen Fehler reinkommen.

Danke für eure Hilfe und g8

Bummi 16. Nov 2010 23:32

AW: Insert bei MSSQL und Autoinc
 
Wenn Du es als "Autoinc" - Feld vorgesehen hast, nein.

Wie gesagt wenn Du auf der Connection ADODataset mit clientseitiger und serverseitiger CursorLocation mischt bekommts Du die in der Datenbank korrekt erzeugten AutoInc-Werte in Deinem Programm nicht mehr mit.
Wenn Du irgendwann ADODatasets mit Oberflächenanbindung (Z.B. DBGrid) verwendest kann es passieren dass ein Post Ärger macht weil die Oberfläche meint daß das AutoInc-Feld nicht leer sein darf, deshalb vorher mein Hinweis, required:=false auf der Feldkomponente.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 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 by Thomas Breitkreuz