Warum ich das mache
In KMU-Projekten ist Access oft das Pflegesystem.
Und WordPress das Frontend für Kunden, Partner oder Support.
Aber was passiert, wenn ein Artikelname in Access geändert wird – und jemand fragt drei Wochen später, warum das anders im Shop steht?
Ich baue dafür eine einfache, aber robuste Versionskontrolle – mit Logging in beiden Welten.
Damit Du jederzeit sagen kannst: „Das war am 12.3. um 9:42 – vom Benutzer SCHMIDT geändert.“
1. Access: Änderungen erfassen
Ich nutze eine Trigger-Logik auf Formularbasis.
Kein SQL-Trigger, kein Shadow-Table.
Einfacher, transparenter, auditierbar.
Beispiel: Änderung in einem Artikel-Formular
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.Dirty Then
Call ProtokolliereAenderung("artikel", Me.artikelnummer, "bezeichnung", Me.bezeichnung.OldValue, Me.bezeichnung.Value)
Call ProtokolliereAenderung("artikel", Me.artikelnummer, "preis", Me.preis.OldValue, Me.preis.Value)
End If
End Sub
Logging-Funktion
Sub ProtokolliereAenderung(tabelle As String, id As Long, feld As String, altwert As Variant, neuwert As Variant)
If Nz(altwert, "") = Nz(neuwert, "") Then Exit Sub
CurrentDb.Execute "INSERT INTO changelog_access (datum, benutzer, tabelle, datensatz_id, feld, altwert, neuwert) " & _
"VALUES (Now(), '" & Environ("USERNAME") & "', '" & tabelle & "', " & id & ", '" & feld & "', '" & Replace(altwert, "'", "''") & "', '" & Replace(neuwert, "'", "''") & "')"
End Sub
2. Änderung an WordPress übergeben
Ich nutze REST-POST, wenn sich relevante Felder ändern.
Sub SendeAenderungNachWP(artikelnummer As String)
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim payload As String
payload = "{""artikelnummer"":""" & artikelnummer & """, ""aktualisiert"":""" & Format(Now, "yyyy-mm-dd hh:nn:ss") & """}"
http.Open "POST", "https://meinshop.de/wp-json/kmu/v1/Stammdaten-update", False
http.SetRequestHeader "Content-Type", "application/json"
http.SetRequestHeader "Authorization", "Bearer " & LadeToken()
http.Send payload
End Sub
3. WordPress: Änderungen empfangen und loggen
REST-Endpunkt in PHP
add_action('rest_api_init', function () {
register_rest_route('kmu/v1', '/stammdaten-update', [
'methods' => 'POST',
'callback' => 'stammdaten_update_log',
'permission_callback' => '__return_true'
]);
});
function stammdaten_update_log($request) {
global $wpdb;
$data = json_decode($request->get_body(), true);
$wpdb->insert('wp_stammdaten_log', [
'artikelnummer' => $data['artikelnummer'],
'zeitpunkt' => current_time('mysql'),
'quelle' => 'Access',
'info' => 'Update über API'
]);
return ['status' => 'ok'];
}
Die Tabelle wp_stammdaten_log
sieht so aus:
id | artikelnummer | zeitpunkt | quelle | info |
---|---|---|---|---|
1 | 4711 | 2025-05-29 09:42:01 | Access | Update über API |
4. Optionale Rückverlinkung ins Access
Manche Projekte wollen’s genau wissen:
Wann wurde ein Artikel in WP zuletzt synchronisiert?
Dann ergänze ich:
ALTER TABLE artikel ADD COLUMN letzter_sync_wp DATETIME;
Und nach erfolgreichem Sync:
CurrentDb.Execute "UPDATE artikel SET letzter_sync_wp = Now() WHERE artikelnummer = '" & artikelnummer & "'"
5. Web-Oberfläche im WordPress-Backend
Ich baue gern eine kleine Adminseite mit dem Plugin „WP Data Access“ oder einem Shortcode:
[table_log artikel="4711"]
Und zeige die letzten Änderungen aus wp_stammdaten_log
.
6. Analyse: Kombinierter Report
Du kannst in Access eine Verknüpfung auf wp_stammdaten_log
legen (per ODBC oder REST-Zwischentabelle) und dann beide Logs zusammenziehen:
SELECT a.datum, a.benutzer, a.feld, a.altwert, a.neuwert,
wp.zeitpunkt AS sync_zeitpunkt, wp.info
FROM changelog_access a
LEFT JOIN wp_stammdaten_log wp ON a.datensatz_id = wp.artikelnummer
WHERE a.tabelle = 'artikel'
ORDER BY a.datum DESC;
Jetzt weißt Du:
Wer hat was geändert? Und wann kam’s im Shop an?
Mein nachvollziehbares Fazit
Stammdaten ändern sich – das ist Alltag.
Aber Änderungen müssen nachvollziehbar bleiben.
Access + WordPress lassen sich dafür gut koppeln, wenn Du ein bisschen Disziplin mitbringst.
Keine Antworten