PDA

Vollständige Version anzeigen : PrimaryKey setzen per SQL (A97)


Paul Betz
15.05.2003, 06:23
Guten Morgen,

ich imporitiere eine Tabelle aus Excel per Importspezifikation. Leider kann ich meines aktuellen Wissens nach in der Importspezifikation keinen PrimaryKey setzen lassen. Somit möchte ich das per SQL nach dem Import nachholen. Im Forum finde ich wie man ein neues Feld mit einem PrimaryKey erstellt. Wie geht das, wenn das Feld in einer Tabelle schon existiert. Das Feld ist kein Autowert-Feld.

Vielen Dank schon mal.

TommyK
15.05.2003, 06:35
Hallo Paul,

nimm folgende Sub:

Sub NewCreatePrimaryKey(TabName As String, NewKeyName As String, _
NewFldName As String, Sort As Long)
'*******************************************
'Name: NewCreatePrimaryKey (Sub)
'Purpose: Erstellt einen neuen Primär Index für die Tabelle in der angegebenen Datenbank
'Author: Thomas Keßler
'Date: Dezember 01, 2002, 10:15:15
'Inputs: TabName = Name der Tabelle, NewKeyName = Name des neuen Primär Indexes
' NewFldName = Name des neuen Feldes, Sort=Sortierung des Feldes
'Output:
'*******************************************

Dim db As DAO.DATABASE
Dim tdf As DAO.TableDef
Dim idx As DAO.Index
Dim Fld As DAO.field

Set db = CurrentDb
Set tdf = db.TableDefs(TabName)

' Erstellen Index
Set idx = tdf.CreateIndex(NewKeyName)

' Anfügen Feld an den Index
Set Fld = idx.CreateField(NewFldName)
Fld.Attributes = Sort
idx.Fields.Append Fld

' Einstellen der Primär Eigenschaften
idx.Primary = True
idx.IgnoreNulls = False
idx.Unique = True

' Anfügen Index an Auflistung
tdf.Indexes.Append idx

End Sub

der Aufruf erfolgt dann so:

Call NewCreatePrimaryKey("DeineTabelle", "NamedesIndex", "DeinFeldname", 0)

wobei die 0 für aufsteigende Sortierung steht. 1 wäre absteigend

Ich hoffe das hilft Dir weiter

khs-hh
15.05.2003, 06:36
Mit

CurrentDB.exec("ALTER TABLE tblApAnz ADD CONSTRAINT x7 PRIMARY KEY (aaAKey, aaMonat)")

geht das.

Dieses Beispiel aus einer meiner Datenbanken weist den PrimaryKey 2 Feldern zu, aber wenn Du ein feld weglässt, ist es genau das was Du suchst.

Das 'x7' ist aus Formalgründen notwendig (Label) kann irgendwie heissen.

Paul Betz
15.05.2003, 08:21
Vielen Dank an Euch,

hat schon geklappt. Beide Lösungen konnte ich bereits verwenden.