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


Alex777

Mitglied
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:
SQL:
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
 

Yaslaw

n/a
Moderator
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):



Die Meldung ist allerdings irreführend, denn es liegt keine Beschädigung in der Datenbank vor, sondern schlicht und einfach ein Fehler in Access, der durch die Installation der Sicherheitsupdates eingeschleppt wird. Microsoft hat den Fehler bestätigt und Bugfixes angekündigt bzw. teilweise bereits veröffentlicht, aber seltsamerweise wurde das fehlerhafte Sicherheitsupdate nicht zurückgezogen, sondern es wird weiter verteilt. Im Folgenden daher eine Zusammenfassung zum aktuellen Stand der Dinge und zu den Möglichkeiten, den Fehler auch ohne Bugfix von Microsoft zu beheben.
Die wichtigsten Fakten im Überblick
Betroffene Access-Versionen
• Access 365, 2019, 2016, 2013 und 2010 (jeweils 32- und 64-Bit)
• Alle Runtime-Versionen von Access 365, 2019, 2016, 2013 und 2010
• Alle sonstigen Anwendungen, die die Access Database Engine zum Zugriff auf eine Access-Datenbank verwenden (von VBA-Makros, über Web-Anwendungen bis hin zu .NET-Applikationen)
Die fehlerhaften Updates
• Alle Office 365- und Click2Run-Updates für Office 2019, 2016, 2013 und 2010 nach dem 12. November 2019
• Sicherheitsupdate KB 4484113 für Office 2016
• Sicherheitsupdate KB 3085368 für Office 2016
• Sicherheitsupdate KB 4484119 für Office 2013
• Sicherheitsupdate KB 4484127 für Office 2010
Auslöser für den Fehler
• Aktualisierungsabfragen, die eine einzelne Tabelle aktualisieren und mindestens ein Kriterium (WHERE-Klausel) verwenden.
• Die Tabellen können sich in der Datenbank oder in einem eingebundenen Backend (Access oder SQL-Server) befinden.
• Pass-Through-Abfragen sind nicht betroffen
Bugfixes von Microsoft
Ursprünglich wurden die Folgen des Problems bei Microsoft offensichtlich unterschätzt, denn bei der Arbeit an den zunächst für den 10. Dezember angekündigten Bugfixes haben die Entwickler nach Hunderten von entrüsteten Kommentaren betroffener Anwender inzwischen den Turbo angeworfen. Ein Bugfix für Access 2016 ist bereits verfügbar und die Veröffentlichung der Updates für die meisten anderen Versionen wurde deutlich vorgezogen:
• Access 365 und Access 2019/2016 Click2Run: 22. November 2019 (voraussichtlich)
• Acces 365 (Halbjährlicher Kanal): 25. November 2019 (voraussichtlich)
• Access 2019 Volumen-Lizenzen: 10. Dezember 2019
• Access 2016 (MSI-Installationen): Installieren Sie das Update KB4484198
• Access 2013: 22. November 2019 (voraussichtlich)
• Access 2010: 22. November 2019 (voraussichtlich)

Abfragen manuell anpassen
Das Entfernen der fehlerhaften Updates bzw. die Rückkehr zur letzten fehlerfreien Version ist nicht immer möglich und häufig auch nicht erwünscht. Schließlich wären die im November dokumentierten Sicherheitslücken damit wieder offen. Es gibt daher noch den von Microsoft empfohlenen Workaround alle betroffenen Aktualisierungsabfragen zu ändern. Der Fehler tritt nämlich nur dann auf, wenn eine Tabelle aktualisiert wird. Erstellen Sie eine Abfrage, die alle Datensätze dieser Tabelle selektiert und passen Sie die Aktualisierungsabfrage so an, dass sie sich auf die Auswahlabfrage und nicht mehr auf die Tabelle bezieht, funktioniert alles wieder einwandfrei.
Wenn Sie diese Lösung in Erwägung ziehen, sollten Sie einen Blick auf eine bei GitHub veröffentlichte VBA-Lösung werfen, die die Aktualisierungsabfragen automatisch identifiziert und den Workaround einbaut. Außerdem wird bereits eine Prozedur mitgeliefert, die diese wenig effizienten Änderungen wieder rückgängig macht, sobald der Fehler von Microsoft behoben ist. Vor dem Einsatz der Lösung sollten Sie aufmerksam die Anmerkungen im Readme-Dokument lesen. Außerdem empfiehlt es sich natürlich vor dem Start der Prozedur ein Backup der Datenbank anzulegen!
Zu guter letzt noch ein kurzer Hinweis in eigener Sache: Nachdem sich Probleme mit Windows- und Office-Updates in letzter Zeit häufen, sollten Sie Ihr System so konfigurieren, dass nicht jede Aktualisierung sofort installiert wird. In unserem neuesten E-Book zeigen wir, wie Ihr System dennoch sicher bleibt:
 

Alex777

Mitglied
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

Erfahrenes Mitglied
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"