PDA

Vollständige Version anzeigen : Mehrfach Primärschlüssel und Index


SilviaP
23.01.2008, 16:19
Was ist hier falsch?
Tabelle - View aus ODBC Verbindung


CurrentDb.Execute ("ALTER TABLE" & mytable.Name & " ADD CONSTRAINT x7 PRIMARY KEY & _
"([Feld1], [Feld2], [Feld3])")


oder:


CurrentDb.Execute "CREATE INDEX UIX_" & mytable.Name & " ON " & mytable.Name & _
" (" & [Feld1], [Feld2], [Feld3] & ") WITH PRIMARY"


oder:


CurrentDb.Execute "CREATE UNIQUE INDEX UIX_" & mytable.Name & " ON " & _
"mytable.Name & " (" & mytable.Fields(0).Name & ", " & mytable.Fields(1).Name & ", " & mytable.Fields(2).Name & ") WITH PRIMARY"


bin verzweifelt. Primärschlüssel ist dran aber nicht indiziert
Danke Silvia

Josef P.
23.01.2008, 16:41
zur Überprüfung, ob ich das richtig verstehe:
mytable.Name ist der Name der per ODBC verknüpften Sicht, die innerhalb Access bearbeitbar sein soll und daher einen PK im Frontend benötigt.


CurrentDb.Execute "CREATE UNIQUE INDEX UIX_" & mytable.Name & " ON " & _
"mytable.Name & " (" & mytable.Fields(0).Name & ", " & mytable.Fields(1).Name & ", " & mytable.Fields(2).Name & ") WITH PRIMARY"
bei dieser SQL-Anweisung finde ich keinen Fehler.
(Dass die Felder eindeutig sind, setzte ich voraus und das eine " vor mytable.Name ist bestimmt nur ein Kopierfehler.)

Primärschlüssel ist dran aber nicht indiziert
den Satz verstehe ich nicht. Wenn ein PK in der Access-TAbelle (verknüpfte Sicht) markiert ist, was ist dann nicht indiziert? ... falls du die Nutzung des Index meinst: wie das im Access-FE aussieht ist dem Server ziemlich egal. ;)

SilviaP
23.01.2008, 20:10
mytable.Name ist der Name der per ODBC verknüpften Sicht, die innerhalb Access bearbeitbar sein soll und daher einen PK im Frontend benötigt.


Genau


" vor mytable.Name ist bestimmt nur ein Kopierfehler


Genau :-)

Wenn ich eine einzige PK in der eingebundenen Tabelle habe, setzt Access den PK richtig ein und das Feld wird gleich auch indiziert.

Mein Problem liegt darin, dass wenn ich mehrere PK's in eine einzige Tabelle benötige, Access die PK's richtig einsetzt aber alle diese Felder werden NICHT indiziert. Einige Berichte benötigen über 1 Minute um es öffnen zu können. Wie soll ich die Anweisung schreiben?

Vielen Dank
Silvia

Josef P.
23.01.2008, 20:38
Wie ich bereits schrieb: dem SQL-Server ist das ziemlich egal, welche Indizes du im Frontend erstellst. Du musst die Tabellen im BE passend indizieren.
Per ODBC werden auch Where-Parameter an die Sicht weitergereicht ... zumindest solange die Ausdrücke in einen SQL-Ausdruck umwandelbar sind.

noch etwas zu deinem Bild:
öffne einmal die Index-Liste (Tabellenentwurf - Menü: Ansicht - Indizes)
Dort sollte der PK sichtbar sein.

Noch etwas ist mir im Bild aufgefallen: Warum ist Htk_Jahr ein Double-Feld?

SWR
24.01.2008, 01:40
Mal angenommen, die Tabelle hiesse "tblTest". Dann ergäbe Dein Beispiel-CodeCurrentDb.Execute ("ALTER TABLE" & mytable.Name & " ADD CONSTRAINT.....==> "ALTER TABLEtblTEST ADD CONSTRAINT.....". Was fällt uns auf bzw. was springt ins Auge? Oder ist das auch nur wieder ein "Kopierfehler"?

Gruss
Stephan

SilviaP
25.01.2008, 18:06
Hallo Stephan!
nein, das ist kein Fehler. Access liest genauso, alle Tabelle, die zu einbinden sind aus einer txt Datei heraus - Ich muss alle angabe mit strings erledigen! Danke!

Ich habe trotzdem nicht geschafft bis jetzt, bei mehereren PK's zusätzlich index auf diese Felder zu setzen - ich werde mich nächste Wo rumschauen :-(

Josef P.
25.01.2008, 18:28
Warum willst du noch einen Index einfügen?
Ich vermute, dass Access bei verknüpften Tabellen/Sichten nur einen einzigen Index auf die verknüpfte Tabelle zulässt, damit der PK markiert werden kann.
Jeder weitere Index ist nutzlos. - sog sehen ist es gut, wenn Access nicht mehr zulässt.

Ich testete das jetzt einmal mit einer Sicht aus einer SQL-Server-DB: solange noch keine PK in der verknüften Tabelle/Sicht (also im FE!) vorhanden ist, kann ich einen Mehrfelder-Index erstellen. Dabei ist es egal, ob ich nur Index oder Unique index angebe, Access verwendet diesen Index immer als PK.


BTW: ich glaube das Index-Anlegen im FE ist ansteckend. ;)
http://www.ms-office-forum.net/forum/showthread.php?t=225493