Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi PRIMARY KEY - doppelter Schlüssel... (https://www.delphipraxis.net/107789-primary-key-doppelter-schluessel.html)

Geist 2. Feb 2008 07:15

Datenbank: SQLExpress • Zugriff über: ADO

PRIMARY KEY - doppelter Schlüssel...
 
Hallo zusammen,

ich betreibe die Programmiererei nur so zum totschlagen der Freizeit, bin also relativer Anfänger. Vor einiger Zeit hatte ich mich schon mal an Datenbanken versucht, jetzt will ich das ganze noch mal angehen.
Mein Ziel ist es eine Tabelle anzulegen die (damit es erst mal einfach bleibt) aus zwei Spalten besteht. Spalte1: laufende Nummer, Spalte2 Name.
Erstellt habe ich die Tabelle mit PRIMARY KEY auf Spalte1, laufende Nummer.
Gibt es eine Möglichkeit beim Einfügen von Datensätzen die 'laufende Mummer' immer entsprechend automatisch zu erhöhen?
Vielen Dank schon mal.

grenzgaenger 2. Feb 2008 07:18

Re: PRIMARY KEY - doppelter Schlüssel...
 
hier wird gemeinhin ein trigger empfohlen. wenn dir das zu kompliziert ist, solltest du dir selbst 'n kleines nummernkreisobjekt schreiben und dort die nummern lösen... als schlechteste möglichkeit sehe ich die autoincrement felder an (weiss nicht ob MS sql server welche unterstützt, ein blick in die doku sollte jedoch klarheit bringen), denn mit denen gibt es normal nur probleme.

<HTH>

Edit: Normal sollte man keine autoincrements verwenden... ein ordentlicher schlüsselbegriff ist da zumeist mehr wert

Geist 2. Feb 2008 07:22

Re: PRIMARY KEY - doppelter Schlüssel...
 
wie muss ich mir das mit den Triggern vorstellen?

Sharky 2. Feb 2008 07:27

Re: PRIMARY KEY - doppelter Schlüssel...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von grenzgaenger
...(weiss nicht ob MS sql server welche unterstützt,...

Unabhängig davon ob es gut oder schlecht ist. Es geht natürlich.

grenzgaenger 2. Feb 2008 07:35

Re: PRIMARY KEY - doppelter Schlüssel...
 
tipp, schau mal in den db handbuch, ist sowieso von datenbank zu datenbank verschieden. aber prinzipiell geht das wie folgt...

create trigger before insert on tabelle....

und da holst du dir aus deinen generator eine neue nummer für deine tabelle ab... diese schreibste dann im trigger (vor dem einfügen des datensatzes) in deine tabelle fort.

und schon, läuft das ...

Geist 2. Feb 2008 08:04

Re: PRIMARY KEY - doppelter Schlüssel...
 
kommen wir mal auf das AutoIncrement zurück. Wie funktioniert das denn genau?
Also Tabelle vorhanden, ich möchte neuen Datensatz speichern, 'laufende Nummer' soll automatisch inc werden.

marabu 2. Feb 2008 08:16

Re: PRIMARY KEY - doppelter Schlüssel...
 
Hallo Heiko,

welchen SQL-Server verwendest du?

da die Tabelle bereits existiert, muss das Schlüsselfeld entprechend angelegt sein. Der SQL Server (egal welches Fabrikat) füllt den nächsten Schlüsselwert bei einem INSERT Statement automatisch ein. Du fütterst befüllst dann nur die restlichen Felder.

Freundliche Grüße

Geist 2. Feb 2008 09:04

Re: PRIMARY KEY - doppelter Schlüssel...
 
ich benutze den SQL Server 2005 Express

marabu 2. Feb 2008 09:41

Re: PRIMARY KEY - doppelter Schlüssel...
 
Vergleiche deine Tabellenstruktur mit dieser:

SQL-Code:
CREATE TABLE demo (
  lfdnr INT IDENTITY(10,5),
  name NVARCHAR(100),
  CONSTRAINT pk_demo PRIMARY KEY (lfdnr)
)
Durch den Zusatz IDENTITY(10,5) wird eine automatische Vergabe von Schlüsselwerten beim Server beauftragt. Der erste mit INSERT eingefügte Datensatz erhält lfdnr = 10, die nächsten lfdnr = 15, 20, 25, ... - die 10 ist der Startwert, die 5 das Increment.
Fehlt die Angabe IDENTITY, dann bist du selbst für die Schlüsselvergabe verantwortlich. Vergibst du keinen Schlüssel, dann erhält der erste und alle folgenden Datensätze lfdNr = NULL, was schon beim zweiten INSERT zu der von dir beobachteten Fehlermeldung führt.

Freundliche Grüße

mkinzler 2. Feb 2008 09:46

Re: PRIMARY KEY - doppelter Schlüssel...
 
Sind bei MSSQL NULL-Werte bei Primärschlüsseln erlaubt? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.
Seite 1 von 2  1 2      

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