Nochmal zur Veranschaulichung, was ich meine. Hab das Gefᅵhl es ist noch
etwas unklar. Ich rede nicht von indizierten Sichten auf dem SQL-Server.
Es geht um ganz normale Sichten ohne eigene Indizes.
Diese verknᅵpfe ich im Access:
Do Until rs.EOF
sSrcSchema = Nz(rs!ObjSchema, "")
sSrcName = Nz(rs!ObjName, "")
sLocalName = Nz(rs!ObjAlias, "")
nSrcType = Nz(rs!ObjType, acTable)
sSrcPrimary = Nz(rs!ObjPK, "")
sSrcPath = sSrcSchema & "." & sSrcName
sPkIndexName = "PK_UI_" & sLocalName
CurrentDb.TableDefs.delete sLocalName
Set tdf = CurrentDb.CreateTableDef(sLocalName, 0&, sSrcPath, sConnect)
dbs.TableDefs.Append tdf
'Index zur Sicht erzeugen
If nSrcType = acQuery Then
If sSrcPrimary <> "" Then
sql = "CREATE UNIQUE INDEX " & sPkIndexName & " ON " & _
sLocalName & "(" & sSrcPrimary & ") WITH PRIMARY"
CurrentDb.Execute sql, dbFailOnError
End If
End If
rs.MoveNext
Loop
Im Abschnitt 'Index zur Sicht erzeugen' erstelle ich gegebenenfalls
einen lokelen PK auf das Objekt mit den Feldern aus sSrcPrimary (z.B.
"ID,NR")
Fᅵr Access ist die verknᅵpfte Sicht im Prinzip ein Tabellenobjekt. Da
sie nicht auf dem Server indiziert sind, haben sie nach dem Verknᅵpfen
keinerlei Schlᅵssel/Indizes.
Nutze ich dieses in einem Join einer Access-Abfrage dann kann es
vorkommen, daᅵ diese durch fehlende Primᅵrschlᅵssel nicht bearbeitbar
und als Formulardatenquelle nicht nutzbar ist.
Deshalb lege ich bei bestimmten Objekten einen lokalen PK im Access-FE
an, der natᅵrlich auch zu den Daten passen muss.
Ich kann sie nun wie eine normale verknᅵpfte Tabelle benutzen.
Meine Frage war ob die Nutzung des lokalen Schlᅵssels und der
Ausfᅵhrungsplan der Sicht auf dem Server sich gegenseitig eher behindern
oder ob das kein Problem darstellt?
Die sauberste Lᅵsung wᅵre wahrscheinlich diese Sichten auf dem Server zu
inidizieren - allerdings muss ich dann mit Schemabinding arbeiten, was
ᅵnderungen an den zugrundeliegenden Tabellen/Sichten verhindert bzw
erschwert. Dafᅵr mᅵsste ich mir dann eine effektive Lᅵsung suchen ...
Lutz
-------------------------------------------------------
Ein vereinfachtes Beispiel:
CREATE VIEW dbo.a_digipen_aufkz
AS
SELECT
dbo.DB_AUFTRAG.ID, dbo.DB_AUFTRAG.AUFUSER, dbo.DB_AUFTRAG.KENNER + ' ' +
dbo.DB_AUFTRAG.ZAEHLER AS AUFKZ,
dbo.DB_PASSWD.NUTZ, dbo.DB_TERM_ANL.ANL_ID,
dbo.DB_TERM_ANL.NR,
dbo.DB_TERM_ANL.BEZNR
FROM
dbo.DB_AUFTRAG LEFT OUTER JOIN
dbo.DB_TERM_ANL ON
dbo.DB_AUFTRAG.ID = dbo.DB_TERM_ANL.AUF_ID LEFT OUTER
JOIN
dbo.DB_PASSWD ON dbo.DB_AUFTRAG.AUFUSER =
dbo.DB_PASSWD.ID
Im Access:
Set tdf = CurrentDb.CreateTableDef("a_at_digipen_aufkz", 0&,
"dbo.a_at_digipen_aufkz", sConnect)
CurrentDb.Execute "CREATE UNIQUE INDEX PK_UI_a_at_digipen_aufkz ON
a_at_digipen_aufkz(ID) WITH PRIMARY"