Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Datensätze anfügen bei unterscheidlichen Access Versionen

Begonnen von risingstar, Mai 10, 2023, 10:53:26

⏪ vorheriges - nächstes ⏩

risingstar

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

MzKlMu

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.
Gruß Klaus

risingstar

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.

ebs17

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
Mit freundlichem Glück Auf!

Eberhard

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

risingstar

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.

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

risingstar

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.

markusxy

@risingstar, hast du den Fehler in der SQL Anwendung - Leerzeichen vor Where - behoben, auf den du in #3 aufmerksam gemacht wurdest?

risingstar

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

PhilS

#11
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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

markusxy

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?

risingstar


ZitatAls schnelle Vorprüfung kannst du mal folgendes im Direktfenster der VBA-Umgebung eingeben:
Bei beiden be-DBs ist die Version 12.0

risingstar

@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?