Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Neuerliches Problem mit dem Anfügen von Datensätzen in einer be-DB

Begonnen von risingstar, Januar 05, 2024, 08:09:40

⏪ vorheriges - nächstes ⏩

risingstar

Hallo,
Ich hatte im Mai 2023 schon mal das Problem, dass sich Datensätze nicht in einer be.DB anfügen lassen. Aus einem unerfindlichen Grund funktionierte es dann bis jetzt und offenbar nach einem oder mehreren Windows und Office Updates ist jetzt wieder Funkstille.

Private Sub Übergabe_Click()
Dim Uebergabe As String
Dim Verzeichnis As String
Dim db As DAO.Database


Verzeichnis = DLookup("[VerzeichnisTabellen]", "Stammdaten", "[ID]=1")

Debug.Print Verzeichnis
   
    Uebergabe = "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 Uebergabe
 
 Set db = OpenDatabase(Verzeichnis)
 db.Execute Uebergabe, dbFailOnError
 db.Close
 Set db = Nothing
   
End Sub

Der String Uebergabe wird meiner MEinung nach richtig erzeugt und lautet:

INSERT INTO LadeVorgänge ( [Charging Station ID], Serial, [RFID Card], Status, Start, [End], [Meter at start (Wh)], [Meter at end (Wh)] ) IN  'z:\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 "z:\Access Tabellen\eMobility, Schlüssel, Stapler 2022 Tabellen.accdb" WHERE (((LadeVorgänge.[Charging Station ID])=2)))));



Wandle ich diesen String in eine Abfrage in Access 2019 um, funktioniert die Sache. Diese Abfrage in SQL sieht meiner Meinung nach gleich aus:

INSERT INTO LadeVorgänge ( [Charging Station ID], Serial, [RFID Card], Status, Start, [End], [Meter at start (Wh)], [Meter at end (Wh)] ) IN 'z:\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 "z:\Access Tabellen\eMobility, Schlüssel, Stapler 2022 Tabellen.accdb" WHERE (((LadeVorgänge.[Charging Station ID])=2)))));

Gibt es dazu Erkenntnisse?
LG Friedrich

ebs17

Die Meldung, die dbFailOnError erzeugen sollte, verschweigst Du?

Was aber bisher schon irritiert:
Mit OpenDatabase referenzierst Du auf eine externe DB. Im SQL-String ist die externe DB die gleiche wie bei OpenDatabase. Wie würden jetzt interne Tabellen referenziert und erkannt?

ZitatWandle ich diesen String in eine Abfrage in Access 2019 um, funktioniert die Sache.
Ja da wird sie mit OpenQuery/CurrentDb ausgeführt, womit dann Verhältnisse intern / extern klar sind.

Diese Konstellation sollte aber immer fehlerbehaftet sein, nicht durch angesprochene Updates bei Windows und Office.
Mit freundlichem Glück Auf!

Eberhard

risingstar

Hallo Eberhard,
danke für den Hinweis der Referenzierung. Das war der Grund. Ich führe die Abfrage jetzt mit CurrentDB.Execute aus und die Sache klappt.

Eine dbFailOnError Meldung habe ich nicht bekommen. Es hat sich einfach nichts getan.

Vielen Dank nochmals
Friedrich

Beaker s.a.

ZitatEine dbFailOnError Meldung habe ich nicht bekommen. Es hat sich einfach nichts getan.
Ne, ist klar, hast du ja auch nicht angefordert.
"INSERT ...", dbFailOnError
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

risingstar

#4
Zu früh gefreut.
Auf dem PC funktioniert die Übergabe problemlos. Die Daten werden auf das Synology-Laufwerk übertragen und dort angefügt. PC und Synology-LW befinden sich im gleichen Netzwerk.

Wird diese Access Anwendung per Outlook an einen Laptop verschickt und dort gestartet und mit dem Tabellenmanager die auf dem Laptop befindliche be verknüpft, können Daten lokal bearbeitet werden. Mit einer VPN Verbindung werden neue Datensätze aber nicht auf das Synology-LW übertragen.

Auf PC und Laptop ist Access 2019 installiert.

Private Sub Übergabe_Click()
Dim Uebergabe As String
Dim Verzeichnis As String


Verzeichnis = DLookup("[VerzeichnisTabellen]", "Stammdaten", "[ID]=1")

    Uebergabe = "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)))));"
       
 
 CurrentDb.Execute Uebergabe
   
End Sub

risingstar

NAchdem auf dem Laptop das Formular in VisualBasich geöffnet wurde und eine Zeile mit Debug.print... hinzugefügt wurde, funktionierte die Sache. Später wurde diese Zeile wieder entfernt und es funktionierte immer noch. Mit nur einem Öffnen des Codes und speichern am Laptop funktionierte es nicht.

Offenbar muss der Code auf dem Laptop extra übersetzt werden, damit die Anwendung läuft.