Warum ich das mache
Ich nutze Access in vielen KMU-Projekten als lokale Schaltzentrale für kleine ETL-Prozesse.
WordPress ist oft das Frontend – für Kunden, Lieferanten oder Anfragen.
Die Daten müssen runter vom Webserver – in geprüfter, brauchbarer Form.
Übersicht: Die Schritte
- Daten aus WordPress lesen (per REST API oder direkt per MySQL)
- Rohdaten in Access importieren
- Daten prüfen, normalisieren, vorbereiten
- Weiterverarbeiten: Berichte, Exporte, Automatisierungen
1. WordPress-Daten extrahieren
Möglichkeit A: REST API nutzen
Einfach, wenn nur Beiträge oder Formulare gebraucht werden.
Ich nutze WinHttp.WinHttpRequest.5.1
in VBA:
Function HoleWordPressJson(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
HoleWordPressJson = http.ResponseText
Else
HoleWordPressJson = ""
End If
End Function
Typischer Aufruf:
Dim json As String
json = HoleWordPressJson("https://dein-wordpress.de/wp-json/wp/v2/posts")
Danach zerlege ich das JSON mit einem VBA-Parser (z. B. VBA-JSON von Tim Hall).
Möglichkeit B: Direkt auf MySQL zugreifen
Das geht schneller, bringt aber Sicherheitsfragen mit sich.
ODBC-Treiber installieren: MySQL ODBC 8.0 Unicode Driver
Dann ODBC-Verbindung einrichten:
Sub LadeDatenVonWordPressMySQL()
Dim cnn As Object, rst As Object
Set cnn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
cnn.Open "Driver={MySQL ODBC 8.0 Unicode Driver};Server=deinserver;Database=wordpress_db;User=root;Password=geheim;"
rst.Open "SELECT ID, post_title, post_date FROM wp_posts WHERE post_type = 'post'", cnn
Do Until rst.EOF
Debug.Print rst!post_title
rst.MoveNext
Loop
rst.Close
cnn.Close
End Sub
2. Daten nach Access laden
Ich speichere Rohdaten zuerst in eine Tabelle wp_import_roh
.
Das erlaubt Nachverfolgung und Wiederholbarkeit.
Access-Jet-SQL:
INSERT INTO wp_import_roh (post_id, titel, datum)
SELECT ID, post_title, post_date
FROM [ODBC;DSN=wordpress;].wp_posts
WHERE post_type = 'post';
Oder über VBA mit Recordset.
3. Daten prüfen und normalisieren
Ich prüfe auf Duplikate, Leerfelder und unerwartete Werte.
Typische Prüf-Queries:
SELECT post_id, Count(*)
FROM wp_import_roh
GROUP BY post_id
HAVING Count(*) > 1;
SELECT *
FROM wp_import_roh
WHERE Nz(titel, '') = '';
Dann überführe ich saubere Daten nach wp_bereinigt
.
INSERT INTO wp_bereinigt (post_id, titel, datum)
SELECT DISTINCT post_id, titel, datum
FROM wp_import_roh
WHERE Nz(titel, '') <> '';
4. Weitergabe und Integration
Je nach Projekt:
- als Bericht (PDF, Word)
- als Excel-Export
- als XML/CSV-Datei für Drittsysteme
- als Trigger für andere Access-Makros oder Power Automate
Beispiel: Excel-Export per VBA
Sub ExportiereBereinigtNachExcel()
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
"wp_bereinigt", "C:\ETL\wp_bereinigt.xlsx", True
End Sub
Beispiel: Automatischer E-Mail-Versand
Sub SendeBereinigtAlsMail()
Dim olApp As Object, olMail As Object
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.CreateItem(0)
olMail.To = "empfaenger@firma.de"
olMail.Subject = "WordPress Daten"
olMail.Body = "Anbei die bereinigten WordPress-Daten."
olMail.Attachments.Add "C:\ETL\wp_bereinigt.xlsx"
olMail.Send
End Sub
Fazit zwischendurch
WordPress-Daten in Access zu integrieren ist kein Hexenwerk.
Mit etwas Disziplin und pragmatischem Vorgehen wird’s robust.
Ich nutze lieber zwei kleine, einfache Prozesse – als ein großes, wackliges Konstrukt.
Wenn Du Fragen hast oder konkrete Probleme, meld Dich.
Und da wäre noch:
5. Um eine MySQL-Datenbank direkt im SQL Server als Linked Server einzubinden, gehst Du wie folgt vor:
Voraussetzungen
- MySQL-ODBC-Treiber installiert (z. B. MySQL ODBC 8.0 Unicode Driver)
- Zugriffsdaten auf die MySQL-Datenbank (Host, Port, User, Passwort)
- SQL Server Management Studio (SSMS)
1. ODBC-Datenquelle einrichten (System-DSN) in Windows: ODBC-Datenquellen (64-Bit)
odbcad32.exe
ausführen (die 64-Bit-Version!)- Reiter System-DSN → Hinzufügen
- MySQL ODBC 8.0 Unicode Driver auswählen
- Name:
MySQL_WordPress
(frei wählbar) - Host, Port, Datenbank, Benutzername, Passwort eingeben
- Testen → Speichern
2. Linked Server im SQL Server anlegen
In SSMS:
EXEC sp_addlinkedserver
@server = N'MYSQLWP',
@srvproduct = N'MySQL',
@provider = N'MSDASQL',
@datasrc = N'MySQL_WordPress';
Zugriffsrechte einrichten:
EXEC sp_addlinkedsrvlogin
@rmtsrvname = N'MYSQLWP',
@useself = N'False',
@rmtuser = N'dein_mysql_user',
@rmtpassword = N'dein_passwort';
Falls Du DSN-less arbeiten willst, kannst Du alternativ einen
@provstr
-Parameter verwenden.
3. Abfragen über den Linked Server
Beispiel: Beiträge aus der wp_posts
-Tabelle abfragen
SELECT *
FROM OPENQUERY(MYSQLWP, 'SELECT ID, post_title FROM wp_posts WHERE post_type = "post" LIMIT 10');
Oder mit Vierpunkt-Notation (langsam & problematisch):
SELECT *
FROM MYSQLWP...[wp_posts]
Tipp: Verwende immer OPENQUERY, da SQL Server dann die Abfrage im MySQL-System ausführt – das ist stabiler und schneller.
4. Fehlerquellen & Tipps
- SQL Server muss als Dienst Zugriff auf die ODBC-Quelle haben
- Firewall am MySQL-Host muss SQL-Zugriffe zulassen (Port 3306)
- Für Tests kannst Du auch MySQL lokal installieren
- Achte auf Zeichencodierungen (UTF8 vs. Latin1)
Keine Antworten