Hi,
ich möchte Datensätze von einem Rechner mit Access 2016 mit einer Anfügeabfrage an eine Datei auf einem zweiten Rechner anfügen, die unter Access 2019 läuft.
Ich bekomme da die Fehlermeldung, dass die Versionen nicht übereinstimen. Gibt es dafür eine Lösung?
LG Friedrich
Hallo,
die Versionen dürften hier keine Rolle spielen.
Die meldung hat da wahrscheinlich eine andere Ursache.
Aber wie soll man etwas beurteilen wenn man es nicht sieht ?
Mit anderen Worten, es könnte sinnvoll sein zu zeigen wie Du es versucht hast.
Hallo Klaus,
es ist die Prozedur, die beim betätigen der Schaltfläche die Meldung auslöst.
Private Sub Übergabe_Click()
Dim Übergabe As String
Dim Verzeichnis As String
Verzeichnis = DLookup("[VerzeichnisTabellen]", "Stammdaten", "[ID]=1")
'Debug.Print Verzeichnis
Übergabe = "INSERT INTO LadeVorgänge ( [Charging Station ID], Serial, [RFID Card], Status, Start, [End], [Meter at start (Wh)], [Meter at end (Wh)] ) IN '" & Verzeichnis & "' " _
& "SELECT LadeVorgängeSBG.[Charging Station ID], LadeVorgängeSBG.Serial, LadeVorgängeSBG.[RFID Card], LadeVorgängeSBG.Status, LadeVorgängeSBG.Start, LadeVorgängeSBG.End, " _
& "LadeVorgängeSBG.[Meter at start (Wh)], LadeVorgängeSBG.[Meter at end (Wh)] " _
& "FROM LadeVorgängeSBG " _
& "WHERE (((LadeVorgängeSBG.Start)>(SELECT Max([Start]) AS StartPC " _
& "FROM LadeVorgänge IN '" & Verzeichnis & "'" _
& "WHERE (((LadeVorgänge.[Charging Station ID])=2)))));"
'Debug.Print Übergabe
CurrentDb.Execute Übergabe, dbFailOnError
End Sub
Der Abfragestring wäre soweit richtig.
INSERT INTO LadeVorgänge ( [Charging Station ID], Serial, [RFID Card], Status, Start, [End], [Meter at start (Wh)], [Meter at end (Wh)] ) IN 'W:\Access Tabellen\eMobility, Schlüssel, Stapler 2022 Tabellen.accdb' SELECT LadeVorgängeSBG.[Charging Station ID], LadeVorgängeSBG.Serial, LadeVorgängeSBG.[RFID Card], LadeVorgängeSBG.Status, LadeVorgängeSBG.Start, LadeVorgängeSBG.End, LadeVorgängeSBG.[Meter at start (Wh)], LadeVorgängeSBG.[Meter at end (Wh)] FROM LadeVorgängeSBG WHERE (((LadeVorgängeSBG.Start)>(SELECT Max([Start]) AS StartPC FROM LadeVorgänge IN 'W:\Access Tabellen\eMobility, Schlüssel, Stapler 2022 Tabellen.accdb'WHERE (((LadeVorgänge.[Charging Station ID])=2)))));
Evtl. liegt es an "CurrentDb.Execute .. " , dass es das in Access 2016 noch nicht gab.
Vor dem zweiten WHERE sollte ein Leerzeichen eingefügt werden zur Syntaxsicherheit.
Da bei Dir alles in der externen DB stattfindet, sollte man einfach die db-Referenz auf diese DB einrichten und die Referenzen innerhalb der SQL-Anweisung weglassen:
Dim db As DAO.Database
Set db = Opendatabase(Verzeichnis)
' ...
dbExecute Übergabe, dbFailOnError
' ...
db.Close
Set db = Nothing
Zitat von: ebs17 am Mai 10, 2023, 15:48:19Da bei Dir alles in der externen DB stattfindet,
Das tut es mit dem vom
@risingstar gezeigten Code nicht.
Ziel der Abfrage ist LadeVorgänge in der aktuellen DB, Quelle ist LadeVorgängeSBG, ebenfalls in der aktuellen DB, nur das Max-Datumskriterium kommt aus LadeVorgänge in der externen DB.
Zitat von: risingstar am Mai 10, 2023, 10:53:26Ich bekomme da die Fehlermeldung, dass die Versionen nicht übereinstimen.
Kannst du mal einen Screenshot der Fehlermeldung oder den exakten Wortlaut posten?
Ein solcher Fehler wäre eher ungewöhnlich. Im Moment kann ich mir nur vorstellen, dass ein solcher Fehler auftritt, wenn du in der einen DB mit A2019 ein Feld mit den neuen Datentypen
Large Integer oder
DateTime Extended erstellt hast. - Wenn du diese neuen Datentypen nicht wirklich brauchst, solltest du den Datentyp ändern. Nach Komprimieren&Reparieren sollte dann die DB in beiden Access Versionen ohne Probleme zu öffnen sein.
Hallo PhilS,
Ziel der Abfrage ist, LadevorgängeSbg in der Quelldatenbank auf dem Laptop in der externen Datenbank auf dem PC unter Ladevorgänge anzuhängen, wobei das Max Datum aus der externen DB der Tabelle Ladevorgänge abgefragt wird.
Die Fehlermeldung habe ich angehängt.
In der QuellDB und der ZielDB sind keine erweiterten Datumsangaben oder große Ganzzahl als Felddatentyp verwendet.
Vor dem Screenshot habe ich alle DBs komprimiert und repariert, trotzdem kommt der Fehler.
Ich habe auch schon überlegt, auf dem Laptop mit A2016 eine Runtime A2019 zu installieren. Ich bin mir aber nicht sicher, ob dann nicht die A2016 gelöscht wird. Und das ginge gar nicht.
Zitat von: risingstar am Mai 10, 2023, 20:12:14In der QuellDB und der ZielDB sind keine erweiterten Datumsangaben oder große Ganzzahl als Felddatentyp verwendet.
Schau nochmal genauer. Auch die offizielle Dokumentation nennt genau dies als Ursache für diese Fehlermeldung.
Guten Morgen PhilS,
im Anhang die beiden Tabellen in der Entwurfsansicht. Ich habe darin keine Große Ganzzahl und kein erweitertes Datum verwendet. In der be-DB (ZielDB) im A2019 ist in den Optionen auch kein Häkchen bei der Unterstützung für diese beiden Datentypen gesetzt.
@risingstar, hast du den Fehler in der SQL Anwendung - Leerzeichen vor Where - behoben, auf den du in #3 aufmerksam gemacht wurdest?
Hallo Eberhard,
nein das konnte ich noch nicht, da der Laptop mit A2016 unterwegs ist. Erst nächste Woche habe ich den wieder im Haus und werde dann den Code ändern.
Ich berichte wieder.
LG Friedrich
Zitat von: risingstar am Mai 11, 2023, 08:00:58im Anhang die beiden Tabellen in der Entwurfsansicht. Ich habe darin keine Große Ganzzahl und kein erweitertes Datum verwendet.
Es geht bei dem Versionsproblem um das Dateiformat der .accdb-Datei. D.h. du musst nicht nur die beiden Tabellen, die direkt in deiner Abfrage verwendet werden, überprüfen, sondern
*alle* Tabellen in der Datenbank.
Als schnelle Vorprüfung kannst du mal folgendes im Direktfenster der VBA-Umgebung eingeben:
? CurrentDb.Version
12.0 -> Altes AccDb Dateiformat, Abwärtskompatibel bis Access 2007
16.7 -> Neues AccDB Dateiformat mit
Large Number Ünterstützung.
32.0 -> Neues AccDB Dateiformat mit
Large Number und
Datetime Extended Ünterstützung.
Zitat von: risingstar am Mai 11, 2023, 08:00:58In der be-DB (ZielDB) im A2019 ist in den Optionen auch kein Häkchen bei der Unterstützung für diese beiden Datentypen gesetzt.
Das ist hier nicht relevant. Diese Optionen betreffen nur das Verhalten von Access, wenn über ODBC verknüpfte Tabellen diese Datentypen enthalten.
@markusxy und
@ebs17 , ich verstehe und teile Eure Aversion gegen das nicht vorhandene Leerzeichen zwischen ' und WHERE. Aber für die DB-Engine ist die Trennung der Token trotzdem erkennbar und somit handelt es sich hier zwar um ein scheußliches, aber nur kosmetisches Problem, und nicht um einen echten technischen Fehler.
Zitat von: PhilS am Mai 11, 2023, 09:34:54Aber für die DB-Engine ist die Trennung der Token trotzdem erkennbar
Ja stimmt, hab ich vergessen.
Woher hast du eigentlich die Info zu den Versionsnummern?
ZitatAls schnelle Vorprüfung kannst du mal folgendes im Direktfenster der VBA-Umgebung eingeben:
Bei beiden be-DBs ist die Version 12.0
@PhilS und
@markusxy: Durch Stöbern im Netz habe ich den Link
https://www.fmsinc.com/MicrosoftAccess/history/features.htm
gefunden. Danach hat A2007 die Versionsnummer 12. Rufe ich bei meinem PC unter Datei das Konto auf steht dort definitiv Office Professional 2019 und unter Info zu Access (Version 2304 Build 16.0....) 64 Bit.
Meine fe- und be-DB habe ich durch Teilen unter Datenbanktools erstellt.
Versuchsweise habe ich eine neue DB erstellt und diese dann ebenfalls geteilt. fe- und be-DB haben Version 12.
Sowohl A2019 als auch 2016 sollen lt. der Tabelle im Link aber Version 16 haben.
Würde das mein Problem erklären?
Wie könnte ich auf V16 upgraden?
Hallo Phil,
jetzt habe ich mir einen Screenshot des Laptop Access Kontos schicken lassen und musste feststellen, dass der Laptop ebenfalls mit Access 2019 arbeitet. Lediglich die letzten beiden 5-stelligen Zahlen sind unterschiedlich.
Das kann es doch wohl nicht sein?
LG Friedrich
Zitat von: risingstar am Mai 13, 2023, 07:13:20Danach hat A2007 die Versionsnummer 12.
[...]
Versuchsweise habe ich eine neue DB erstellt und diese dann ebenfalls geteilt. fe- und be-DB haben Version 12.
Sowohl A2019 als auch 2016 sollen lt. der Tabelle im Link aber Version 16 haben.
Das ist alles soweit wie üblich und erwartet.
Du wirfst die Versionsnummern der Anwendung MsAccess.exe und die Version des Dateiformates durcheinander.
Die niedrigste Versionsnummer die eine ACCDB *
Datei* haben kann, ist 12.0, weil mit Access 2007 das ACCDB-Dateiformat eingeführt wurde. Aber auch ACCDB-Dateien, die mit Access 2016, Access 2019 oder Access 2021 erstellt wurden, haben standardmäßig das
Dateiformat Version
12.0. Erst wenn du einen der neuen Datentypen verwendest, wird ein neueres Dateiformat mit höherer Versionsnummer erstellt.
Zurück zu deinem konkreten Problem...
Zitat von: risingstar am Mai 11, 2023, 13:56:10Bei beiden be-DBs ist die Version 12.0
Das überrascht mich! - Und es ergibt so keinen Sinn.
Die offizielle Dokumentation für den Fehler 3956 (https://learn.microsoft.com/en-us/office/troubleshoot/access/database-requires-newer-access) - "The database you are trying to open requires a newer version of Microsoft Access." nennt nur die Situation mit den neueren Datentypen als mögliche Fehlerursache.
Mit fällt im Moment nicht besseres ein, als dir zu empfehlen
*nochmal* die Versionsnummern deiner beiden Dateien mit CurrentDb.Version zu prüfen. - Nur für den Fall, dass bei der vorigen Prüfung eine Verwechslung o.ä. passiert ist.
Alle Datenbanken fe und be auf dem PC und dem Laptop haben definitiv die Version 12.0.
Wird auf dem Laptop in der Abfrage die Zieldatei explicit und nicht als Variable eingegebn und die Abfrage in VBA ausgeführt, funktioniert das Anfügen der Datensätze problemlos.
INSERT INTO LadeVorgänge ( [Charging Station ID], Serial, [RFID Card], Status, Start, [End], [Meter at start (Wh)], [Meter at end (Wh)] ) IN [color=blue]'W:\Access Tabellen\eMobility, Schlüssel, Stapler 2022 Tabellen.accdb'[/color]
SELECT LadeVorgängeSBG.[Charging Station ID], LadeVorgängeSBG.Serial, LadeVorgängeSBG.[RFID Card], LadeVorgängeSBG.Status, LadeVorgängeSBG.Start, LadeVorgängeSBG.End, LadeVorgängeSBG.[Meter at start (Wh)], LadeVorgängeSBG.[Meter at end (Wh)]
FROM LadeVorgängeSBG
WHERE (((LadeVorgängeSBG.Start)>(SELECT Max([Start]) AS StartPC FROM LadeVorgänge IN [color=blue]'W:\Access Tabellen\eMobility, Schlüssel, Stapler 2022 Tabellen.accdb'[/color]
WHERE (((LadeVorgänge.[Charging Station ID])=2)))));
Zitat von: risingstar am Mai 16, 2023, 21:17:31Wird auf dem Laptop in der Abfrage die Zieldatei explicit und nicht als Variable eingegebn und die Abfrage in VBA ausgeführt, funktioniert das Anfügen der Datensätze problemlos.
Mysteriös!
Nur mal dumm gefragt: Besteht die Möglichkeit, dass dann wenn der Fehler auftritt ein ganz anderer Wert in der Variable
Verzeichnis steht, als du annimmst? Also hast du den in #2 (https://www.access-o-mania.de/forum/index.php?msg=159363) gezeigten, vollständigen SQL-String so geprüft unmittelbar bevor der Fehler aufgetreten ist, oder ist das nur der SQL-String wie er aussehen
sollte?
Der String, der in VBA erstellt wird, ist gleich wie der in der SQL Abfrage in Access.
Allerdings habe ich jetzt auf dem Laptop gearbeitet, und dabei wurde das Programm offenbar auf dem Laptop kompiliert und seither funktioniert die Sache. Mit und ohne Leerzeichen vor dem 2. WHERE.
Warum ist mir ein Rätsel.
Bisher hatte ich die fe-DB immer per e-mail geschickt.
Danke an alle, die mir hier geholfen haben.