Warum ich Access und Woo zusammenbringe
Viele KMUs pflegen ihre Produktdaten in Access.
Weil es einfach ist, weil es da ist, weil es lÀuft.
Gleichzeitig soll WooCommerce im Frontend aktuelle Infos zeigen – und neue Daten (BestĂ€nde, Preise) zurĂŒckspielen.
Ich zeige Dir, wie ich den bidirektionalen Sync gelöst habe: robust, nachvollziehbar, ohne Bauchschmerzen.
Architektur im Ăberblick
Schicht | Funktion |
---|---|
Access Frontend | Pflege von Artikeln, Preisen, Lager |
WooCommerce API | REST-Zugriff auf Produkte, Lager, Preise |
PHP Hooks | Eingehende Daten aus Woo validieren |
SQLite / JSON | Zwischenspeicher fĂŒr Sync-Deltas (optional) |
VBA Scheduler | Sync-Intervalle & Konfliktlösung |
1. Artikel aus WooCommerce abrufen
Ich ziehe die Artikel nicht direkt aus der Datenbank, sondern per REST-API.
Das ist sicherer und unabhÀngig vom Hosting.
REST-Aufruf in VBA
Function LadeWooProdukteJson() As String
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", "https://deinshop.de/wp-json/wc/v3/products?per_page=100", False
http.SetRequestHeader "Authorization", "Basic " & Base64BenutzerPW()
http.Send
If http.Status = 200 Then
LadeWooProdukteJson = http.ResponseText
Else
LadeWooProdukteJson = ""
End If
End Function
Parser: JSON nach Tabelle
Nutze VBA-JSON
(JsonConverter.bas) fĂŒr das Parsen.
Beispiel: Produktname, SKU, Preis, Lager
Sub ImportiereProdukte()
Dim js As Object, itm As Variant
Set js = JsonConverter.ParseJson(LadeWooProdukteJson)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("tblWooProdukte", dbOpenDynaset)
For Each itm In js
rs.AddNew
rs!woo_id = itm("id")
rs!name = itm("name")
rs!sku = itm("sku")
rs!preis = itm("price")
rs!bestand = itm("stock_quantity")
rs.Update
Next
End Sub
2. Daten aus Access nach WooCommerce schreiben
Du willst nicht immer alles hochladen – nur geĂ€nderte Daten.
Ich nutze eine Tabelle tblSyncStatus
, in der der letzte Sync-Zeitpunkt pro Artikel steht.
Preis/Lager per REST aktualisieren
Sub UpdateWooPreisBestand(wooID As Long, preis As Double, bestand As Long)
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim payload As String
payload = "{""regular_price"":""" & preis & """,""stock_quantity"":" & bestand & "}"
http.Open "PUT", "https://deinshop.de/wp-json/wc/v3/products/" & wooID, False
http.SetRequestHeader "Authorization", "Basic " & Base64BenutzerPW()
http.SetRequestHeader "Content-Type", "application/json"
http.Send payload
If http.Status <> 200 Then MsgBox "Fehler beim Sync: " & http.ResponseText
End Sub
3. WooCommerce-Ănderungen empfangen (z. B. neue Produkte)
Woo kann bei Ereignissen HTTP-Requests senden („Webhooks“).
Beispiel: Neuer Artikel angelegt
add_action('woocommerce_new_product', function($id) {
$post = get_post($id);
$product = wc_get_product($id);
$data = [
'id' => $id,
'sku' => $product->get_sku(),
'name' => $product->get_name(),
'price' => $product->get_price(),
'qty' => $product->get_stock_quantity()
];
wp_remote_post("https://access-sync.de/api/newproduct.php", [
'body' => json_encode($data),
'headers' => ['Content-Type' => 'application/json']
]);
});
Der newproduct.php
-Endpunkt schreibt dann z. B. in eine CSV oder SQLite, die Access regelmĂ€Ăig ausliest.
4. Konfliktlösung und Sync-Matrix
Ich fĂŒhre in Access eine einfache tblSyncMatrix
:
ArtikelNr | WooID | GeÀndert Access | GeÀndert Woo | Status |
---|---|---|---|---|
4711 | 187 | 2024-05-10 12:31 | 2024-05-10 12:28 | Konflikt |
4712 | 188 | 2024-05-10 12:20 | NULL | Upload |
4713 | 189 | NULL | 2024-05-10 12:30 | Download |
Regel:
Wenn beide geĂ€ndert: manuelle PrĂŒfung
Sonst automatisch synchronisieren
5. Basisauth sicher speichern
Zugangsdaten nicht im Klartext
Function Base64BenutzerPW() As String
Dim s As String
s = LadeToken() ' DPAPI-verschlĂŒsselter String
Base64BenutzerPW = EncodeBase64(s)
End Function
Funktion EncodeBase64()
findest Du in vielen VBA-Snippets.
Die Zugangsdaten (Benutzer:Passwort) speichere ich verschlĂŒsselt per DPAPI, wie hier beschrieben.
6. Automatisieren im TagesgeschÀft
Workflow in VBA
Sub TĂ€glicherSync()
ImportiereProdukte
PrĂŒfeUndLadeĂnderungenVonWoo
PrĂŒfeUndLadeĂnderungenVonAccess
KonflikteKennzeichnen
KonflikteAnzeigenOderLösen
End Sub
Trigger
- Bei DB-Start (Autoexec)
- Geplant ĂŒber Windows-Taskplaner (
MSACCESS.exe /x TĂ€glicherSync
)
Das asynchrone Fazit
Access und WooCommerce lassen sich sauber verbinden – ohne teure Middleware.
Wichtig ist ein klarer Sync-Plan:
Was darf hoch, was runter, und was nicht automatisch?
Mit REST, DPAPI und etwas Disziplin lĂ€uft das stabil – auch ĂŒber Jahre.
Keine Antworten