Wie ich WordPress-Daten in Access ETL-Prozesse integriere: Extraktion, Prüfung, Weitergabe

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

  1. Daten aus WordPress lesen (per REST API oder direkt per MySQL)
  2. Rohdaten in Access importieren
  3. Daten prüfen, normalisieren, vorbereiten
  4. 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)

  1. odbcad32.exe ausführen (die 64-Bit-Version!)
  2. Reiter System-DSNHinzufügen
  3. MySQL ODBC 8.0 Unicode Driver auswählen
  4. Name: MySQL_WordPress (frei wählbar)
  5. Host, Port, Datenbank, Benutzername, Passwort eingeben
  6. 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)

Kategorien:

Keine Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert