# MS SQL - Update/Delete Abfragen aus MS Access auf eine linked Table



## Alex777 (22. November 2019)

Hallo zusammen 

Da meine Access DB von vielen Leuten im Netzwerk genutzt wird und es hier immer wieder zu Problemen kommt, lager ich das BE aktuell nach MS SQL aus.

Nun habe ich das Problem, dass ich es nicht schaffe aus Access eine Update/Delete Abfrage auszuführen um Datensätze in der Tabelle auf dem SQL Server zu ändern. Bei einem normalen Insert Befehl funktioniert es tadellos.

Ich habe mich mit dem Nutzer den ich in der Verbindung angegeben habe auch mal direkt im Management Studio eingeloggt. Dort kann ich ganz normal Datensätze in der Tabelle löschen und editieren.

Wenn ich in Access in der verlinkten Tabelle direkt etwas ändern möchte, steht in der Statusleiste "Diese Datensatzgruppe kann nicht aktualisiert werden".
Wenn ich eine Update Abfrage dafür schreibe kommt die Meldung "Die Abfrage " ist beschädigt"

Hier ein beispielhafter Code: 

```
UPDATE dbo_Bestellliste SET dbo_Bestellliste.Bemerkungen = 'test123'
WHERE (((dbo_Bestellliste.Bemerkungen)="test"));
```

Bei einer Delete Abfrage kommt die Meldung "Löschen aus angegebenen Tabellen nicht möglich."

Mache ich hier etwas grundsätzlich falsch? Gibt es evtl. gar keine Möglichkeit aus Access heraus Daten auf einem MSSQL Server zu ändern?

Ich nutze Access 2016 und MSSQL Server Express 2008.

Beste Grüße aus dem Westerwald! 

Alex


----------



## Zvoni (22. November 2019)

Hast du saubere primary keys?
bzw. Hast du mal PassThrough probiert?
https://stackoverflow.com/questions/19554800/cannot-delete-and-update-records-on-access-linked-table


----------



## Yaslaw (22. November 2019)

Der Fehler "Besschädigte Abfrage" bei einer Update-Abfrage mit einem WHERE-Teil ist ein aktueller Bug in der aktuellsten Version von Access: Access error: "Query is corrupt"

Du kannst eine Select-Abfrage machen und den Update darüber. Ich hatte das Problem selber noch nicht, hab darum keine Erfahrung

Aus dem aktuellen smarttools Newsletter


> Fehlermeldung über beschädigte Abfragen nach Office-Update
> [Access] [365] [2019] [2016] [2013] [2010]
> Die Office-Sicherheitsupdates vom 12. November 2019 sollten eigentlich nur eine Sicherheitslücke in Access beheben, aber es gibt eine unangenehme Nebenwirkung: nach der Installation lassen sich die meisten Access-Datenbanken nicht mehr sinnvoll einsetzen. Anwender werden immer wieder mit einer Fehlermeldung über beschädigte Abfragen konfrontiert (Fehlernummer 3340):
> 
> ...


----------



## Alex777 (3. Dezember 2019)

Danke für eure Antworten, mit einer PassThrough Abfrage scheint es zu gehen!

Werden SQL Statements per VBA, also mit dem DoCmd.RunSQL Befehl, generell als PassThrough ausgeführt?


----------



## Zvoni (4. Dezember 2019)

AFAIK, glaube nicht. Ist aber lange her, dass ich mich mit sowas befasst habe.
Das SQL-Statement wird zuerst an die Jet-Engine übergeben, und wenn die den SQL-Dialekt nicht versteht, bekommst du sie zurück an den Kopf geworfen.
Beispiel MySQL als linked Table
SELECT * FROM MyTable WHERE Name="Irgendwas" LIMIT 10
Die Jet-Engine versteht das "LIMIT 10" nicht (In Access hiesse das SELECT TOP 10 * FROM MyTable.....)
Mit einer PassThrough wird das Statement jedoch an den Empfänger in Rohform durchgeleitet
"Ich habe hier eine Anfrage für dich. Schau zu wie du damit klar kommst"


----------

