Falscher Index auf verknüpfte Views

29/01/2009 - 11:02 von Lutz Uhlmann | Report spam
Ich verknüpfe Views eines SQL-Servers in meinem Access-Frontend ...

Beim Verknüpfen setze ich bei bestimmten Views einen PrimaryKey:
sql = "CREATE UNIQUE INDEX " & sPkIndexName & " ON " & _
sLocalName & "(" & Trim(sSrcPrimary) & ") WITH PRIMARY"
dbs.Execute sql, dbFailOnError

Nun hatte ich bei einer View einen falschen PK angegeben. Sprich sie hatte
gar keinen eindeutigen Key und ich hatte aber einen auf ID angelegt.
Dies hatte aber für mich unerwartete Nebenwirkungen:

Das Ergebnis der Abfrage ànderte sich gegenüber dem Original auf dem
SQL-Server: bestimmte Datensàtze wurden jetzt doppelt und dreifach
angezeigt, andere vielen weg, die Gesamtzahl stimmte aber! Mir war nicht
bewußt, daß das Setzen eines PKs in diesem Falle solche Auswirkungen haben
kann!!!

Kann mir dazu vielleicht jemand mehr sagen??? Möchte gern die Hintergründe
des Fehlers erkennen ...

Danke, Lutz
 

Lesen sie die antworten

#1 Josef Poetzl
29/01/2009 - 20:29 | Warnen spam
Hallo!

Lutz Uhlmann schrieb:
Ich verknüpfe Views eines SQL-Servers in meinem Access-Frontend ...

Beim Verknüpfen setze ich bei bestimmten Views einen PrimaryKey:
sql = "CREATE UNIQUE INDEX " & sPkIndexName & " ON " & _
sLocalName & "(" & Trim(sSrcPrimary) & ") WITH PRIMARY"
dbs.Execute sql, dbFailOnError

Nun hatte ich bei einer View einen falschen PK angegeben. Sprich sie hatte
gar keinen eindeutigen Key und ich hatte aber einen auf ID angelegt.
Dies hatte aber für mich unerwartete Nebenwirkungen:

Das Ergebnis der Abfrage ànderte sich gegenüber dem Original auf dem
SQL-Server: bestimmte Datensàtze wurden jetzt doppelt und dreifach
angezeigt, andere vielen weg, die Gesamtzahl stimmte aber! Mir war nicht
bewußt, daß das Setzen eines PKs in diesem Falle solche Auswirkungen haben
kann!!!

Kann mir dazu vielleicht jemand mehr sagen??? Möchte gern die Hintergründe
des Fehlers erkennen ...



Den exakten Grund kann ich dir nicht nennen, es hàngt imo mit der Art
der Datenanforderung von Jet an den SQL-Server über ODBC zusammen.
Verfolge das einmal im Profiler, dann wirst du sehen, dass der PK als
Kennung verwendet wird. Die Daten werden über die Angabe der
gewünschten PK vom SQL-Server bereitgestellt.
Der Ablauf ist meinst (immer?) so: 1. Pk-Übertragen, 2. die Restlichen
Daten für die PK blockweise übermitteln.

Ich könnte mir nun vorstellen, dass die Kommunikation gestört wird,
wenn in der Access-Tabelle ein PK eingestellt ist, der gar keiner ist.

mfg
Josef


EPT: (Access Error Prevention Table) http://access.joposol.com/
FAQ: (Access-FAQ von Karl Donaubauer) http://www.donkarl.com/

Ähnliche fragen