Hallo liebe Communtiy,
ich bin auf ein Problem gestoßen dessen Lösung sicherlich ein Leichtsinnsfehler ist, den ich aber leider bisher nicht finden konnte.
Ich habe ein Formular (fArtikelAnlegen) das ausschließlich zum eintragen von neuen Datensätzen (in eine Tabelle public_tArtikel) verwendet wird (es ist so eingestellt, dass nur neue Datensätze über das Formular angelegt werden können). In dem AfterInsert Event habe ich dann ein kurzen VBA Code eingefügt, der eigentlich 2 Datensätze in anderen Tabellen aktualisieren sollte.
Ursprünglich hatte ich die Tabellen in Access selbst und dabei hatte dieser Code funktioniert. Nun habe ich aber eine externe PostgreSQL Datenbank angebunden und in Access entsprechend verlinkte Tabellen erstellt. Meinen Code habe ich dann angepasst, dass er die Namen der verlinkten Tabellen verwendet (Struktur identisch), und nun funktioniert es plötzlich nicht mehr.
Hier der Code aus dem AfterInsert Event:
Private Sub Form_AfterInsert()
Dim laufendeNummer As Integer
Dim gtin As String
Dim id As Integer
laufendeNummer = Me.intLaufendeNummer
laufendeNummer = laufendeNummer + 1
gtin = Me.txtGTIN
id = Me.IDArtikel
CurrentDb.Execute "UPDATE public_tHersteller SET intLaufendeNummer = " & laufendeNummer & " WHERE IDHersteller = " & Me.IDHersteller
CurrentDb.Execute "UPDATE public_tGTINs SET IDArtikel = " & id & " WHERE txtGTIN = '" & gtin & "'"
End Sub
Anbei zwei Screenshots mit den jeweiligen Tabellen Strukturen.
Eigentlich sollte also bei public_tHersteller die laufendeNummer um 1 hochgezählt werden, und bei public_tGTINs sollte IDArtikel hinterlegt werden. Wie erwähnt, mit lokalen in Access erstellten Tabellen hatte das ganze normal funktioniert, also sollte es mit verlinkten Tabellen sicherlich auch funktionieren aber irgendwo habe ich wohl doch einen Fehler eingebracht.
Die im Code verwendeten Formular Felder funktionieren auch, wenn ich also einen neuen Datensatz hinzufüge, sind die Daten wie z.B. Me.IDHersteller richtig ausgefüllt.
Vielen Dank im Voraus für jegliche Rückmeldung hierzu, falls noch weitere Infos gebraucht werden um den Fehler zu analysieren stelle ich diese gerne bereit.
Viele Grüße
Eisman333
Ich sehe bisher kein offensichtliches Problem mit deinem Code.
Generell solltest du bei DB.Execute aber die Option dbFailOnError verwenden. Dann bekommst du bei Problemen mit der Ausführung des SQL einen echten Fehler mit einer meist hilfreichen Meldung, während bisher bei deinem Code ein SQL-Fehler einfach ignoriert wird.
CurrentDb.Execute "UPDATE .... = '" & gtin & "'", dbFailOnError
Das natürlich für beide SQL-Statements.
Vielen Dank für die schnelle Rückmeldung und für die Info mit dbFailOnError. Ich habe das gleich hinzugefügt, mit der Hoffnung, eine Fehlermeldung zu erhalten um das Problem genauer zu untersuchen, allerdings gab es "leider" keinen Fehler. Stattdessen funktioniert es nun einfach, obwohl ich wirklich nichts verändert habe außer bei beiden SQLs hinten das dbFailOnError hinzuzufügen.
Ich vermute jetzt einfach mal, das sich Gestern irgendwas "verhakt" hatte und ich einfach mal Access hätte neustarten müssen.
Auf jeden Fall trotzdem vielen Dank für deine Hilfe! Werde diesen Zusatz für die Fehlermeldung auch bei meinen anderen DB.Execute SQLs hinzufügen, Vorsicht ist immerhin besser als Nachsicht.