Warum Access?
Wenn Du WooCommerce-Daten auswerten willst, reicht ein Export selten.
Du brauchst Live-Zugriff, Filter, Abfragen, eigene Logik.
Und Access kann das – besser als Excel oder irgendein WordPress-Plugin.
Mit ODBC greifst Du direkt auf MySQL zu.
Und mit ein bisschen Jet-SQL und VBA machst Du daraus ein flexibles Reporting-Tool fĂŒr den Mittelstand.
Vorbereitung: MySQL-ODBC-Verbindung
Installiere den „MySQL ODBC 8.0 Unicode Driver“. Oder aktueller.
Dann in Access eine verknĂŒpfte Tabelle anlegen – oder den Zugriff per Code.
Beispiel ohne DSN:
Public Function MySQL_Open(sql As String) As DAO.Recordset
Dim db As DAO.Database
Set db = OpenDatabase("", False, False, _
"ODBC;Driver={MySQL ODBC 8.0 Unicode Driver};" & _
"Server=deinserver.de;Database=woocommerce;" & _
"User=readonly;Password=geheim;Option=3;")
Set MySQL_Open = db.OpenRecordset(sql)
End Function
WooCommerce: Die wichtigsten Tabellen
| Tabelle | Inhalt |
|---|---|
| wp_posts | Bestellungen (post_type = ’shop_order‘) |
| wp_postmeta | Zusatzdaten zu Bestellungen |
| wp_woocommerce_order_items | Positionen in Bestellungen |
| wp_users | Kunden |
| wp_usermeta | Kundendaten (Telefon, Adresse, etc.) |
Bestellungen werden als post_type = 'shop_order' gespeichert.
Status wie wc-completed, wc-processing stehen im post_status.
Beispiel: Abfrage aller Bestellungen der letzten 7 Tage
SELECT ID, post_date, post_status
FROM wp_posts
WHERE post_type = 'shop_order'
AND post_date >= DATE_SUB(NOW(), INTERVAL 7 DAY)
Jet-SQL-Tipp: Views auf MySQL-Seite anlegen
Wenn Du komplexe Abfragen in Access machst, bremst Jet-SQL.
Also leg in MySQL eine View an:
CREATE VIEW vw_recent_orders AS
SELECT p.ID, p.post_date, pm1.meta_value AS order_total
FROM wp_posts p
LEFT JOIN wp_postmeta pm1 ON pm1.post_id = p.ID AND pm1.meta_key = '_order_total'
WHERE p.post_type = 'shop_order' AND p.post_status = 'wc-completed'
Dann in Access verknĂŒpfen.
Keine Performanceprobleme mehr. Kein Ărger mit SQL-Syntax.
Dynamische Filter in Access
In Deinem Access-Frontend kannst Du dann per Formular steuern, was gefiltert wird.
Beispiel: Filter auf Kundennummer oder Zeitraum
Dim sql As String
sql = "SELECT * FROM vw_recent_orders WHERE 1=1"
If Not IsNull(Me.txtKunde) Then
sql = sql & " AND customer_id = " & Me.txtKunde
End If
If Not IsNull(Me.txtVon) Then
sql = sql & " AND post_date >= #" & Format(Me.txtVon, "yyyy-mm-dd") & "#"
End If
If Not IsNull(Me.txtBis) Then
sql = sql & " AND post_date <= #" & Format(Me.txtBis, "yyyy-mm-dd") & "#"
End If
Set Me.Form.Recordset = MySQL_Open(sql)
DatensÀtze zÀhlen, Summen bilden
Access kann das auch live ĂŒber ODBC – aber nur, wenn Du Views oder Server-Abfragen nutzt.
SELECT COUNT(*) AS Anzahl, SUM(meta_value) AS Umsatz
FROM wp_postmeta
WHERE meta_key = '_order_total'
Oder auf der Access-Seite:
Dim rs As DAO.Recordset
Set rs = MySQL_Open("SELECT SUM(order_total) FROM vw_recent_orders")
Me.lblUmsatz.Caption = Format(rs(0), "Currency")
Automatischer Export nach Excel
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
"vw_recent_orders", "C:\Berichte\Umsatzbericht.xlsx", True
Oder als PDF:
DoCmd.OutputTo acOutputReport, "rpt_Umsatz", acFormatPDF, "C:\Berichte\Umsatz.pdf"
Sicherheit nicht vergessen
- Nur lesende MySQL-User verwenden
- Keine Kennwörter im Klartext speichern
- Optional: Zugriff ĂŒber VPN oder SSH-Tunnel
- Backup der MySQL-Datenbank regelmĂ€Ăig einplanen
Mein Fazit als DatenschÀfer
WooCommerce ist nicht fĂŒrs Reporting gebaut.
Access schon.
Wenn Du beides kombinierst, bekommst Du das Beste aus beiden Welten.
Das Web verkauft.
Access wertet aus.
Und der Schef weiĂ, wo der Umsatz liegt.