Warum ich das mache
WordPress kennt keine JOINs, keine parametrisierten Reports, kein VBA.
Access dagegen kann das alles – wenn die Daten erst mal da sind.
Statt direkt auf die MySQL-Datenbank zuzugreifen, gehe ich ĂŒber die REST-API.
Ist robuster, firewallfreundlich, HTTPS-basiert. Und Du hast volle Kontrolle ĂŒber die Datenstruktur.
1. WordPress-Daten verfĂŒgbar machen
Custom REST-Endpunkt in WordPress
Du brauchst einen Endpunkt, der Dir gezielt Daten gibt.
Nicht alles, nicht wild – sondern das, was Du brauchst.
add_action('rest_api_init', function () {
register_rest_route('myplugin/v1', '/kunden/', [
'methods' => 'GET',
'callback' => 'meine_kunden_liste',
'permission_callback' => '__return_true'
]);
});
function meine_kunden_liste($data) {
global $wpdb;
$results = $wpdb->get_results("
SELECT ID, display_name, user_email
FROM {$wpdb->prefix}users
WHERE user_status = 0
", ARRAY_A);
return $results;
}
Der Endpunkt liefert nun JSON:https://deine-seite.de/wp-json/myplugin/v1/kunden
2. Zugriff auf die API per VBA
Daten abrufen
Function HoleJson(URL As String) As String
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", URL, False
http.Send
If http.Status = 200 Then
HoleJson = http.ResponseText
Else
HoleJson = ""
End If
End Function
JSON verarbeiten
Ich verwende dafĂŒr den JSON-Parser „VBA-JSON“ von Tim Hall.
Einbindung als Modul (JsonConverter.bas
).
Dann:
Sub ImportiereKunden()
Dim jsonText As String
Dim json As Object
Dim eintrag As Variant
Dim db As DAO.Database
Dim rst As DAO.Recordset
jsonText = HoleJson("https://deine-seite.de/wp-json/myplugin/v1/kunden")
Set json = JsonConverter.ParseJson(jsonText)
Set db = CurrentDb
Set rst = db.OpenRecordset("kunden_import", dbOpenDynaset)
For Each eintrag In json
rst.AddNew
rst!wp_id = eintrag("ID")
rst!name = eintrag("display_name")
rst!email = eintrag("user_email")
rst.Update
Next
End Sub
3. Funktion in Access verfĂŒgbar machen
Jetzt kannst Du die Daten wie gewohnt in Formulare, Reports oder Abfragen einbinden.
Beispiel: Dropdown in einem Kombinationsfeld mit aktuellen WP-Nutzern.
SELECT name FROM kunden_import ORDER BY name;
Oder als Lookup in einem Formularfeld.
Oder zur VerknĂŒpfung mit lokal gepflegten Stammdaten.
4. Optional: API-Parameter verwenden
Du kannst REST-Endpunkte mit Parametern bauen:
register_rest_route('myplugin/v1', '/kunden/(?P<email>[a-zA-Z0-9@._-]+)/', [
'methods' => 'GET',
'callback' => 'kunde_by_email',
'permission_callback' => '__return_true'
]);
function kunde_by_email($data) {
$email = sanitize_email($data['email']);
global $wpdb;
return $wpdb->get_row("
SELECT ID, display_name
FROM {$wpdb->prefix}users
WHERE user_email = '{$email}'
", ARRAY_A);
}
Dann in VBA:
Dim url As String
url = "https://deine-seite.de/wp-json/myplugin/v1/kunden/test@firma.de"
5. Fehlerbehandlung und Logging
Ich logge alle REST-Zugriffe in eine kleine Tabelle rest_log
.
Sub LogRequest(URL As String, Antwort As String)
CurrentDb.Execute "INSERT INTO rest_log (zeitpunkt, url, inhalt) " & _
"VALUES (Now(), '" & URL & "', '" & Replace(Antwort, "'", "''") & "')"
End Sub
So siehst Du auch spÀter, ob WordPress Mist gebaut hat.
Oder ob Du selbst geschlafen hast.
Mein Tipp
Wenn Du die Kontrolle brauchst, nimm REST.
Wenn es schnell gehen muss, nimm ODBC.
Aber wenn Du WordPress mehrfach integrieren willst – REST ist der sauberste Weg.
Du definierst, was reinkommt. Und Access frisst es.
Keine Antworten