Warum ich Access dafür nutze
Wenn Du für mehrere Mandanten arbeitest, laufen oft auch mehrere WordPress-Installationen – jede mit eigener Datenbank.
Ein zentrales BI-System ist zu groß.
Access reicht, um Daten zu sammeln, zu prüfen und gezielt weiterzugeben.
Ich zeige Dir, wie ich Access als Hub zwischen den Instanzen nutze.
Architektur: Was liegt wo
Komponente | Aufgabe |
---|---|
WordPress Mandant 1 | eigene MySQL-DB, z. B. Kundenportal |
WordPress Mandant 2 | eigene MySQL-DB, z. B. Bewerbersystem |
WordPress Mandant 3 | eigene MySQL-DB, z. B. Ticketing |
Access | zieht alle Daten zusammen |
Vorbereitung: ODBC-Verbindungen
Installiere den MySQL ODBC 8.0 Unicode Driver
Für jede Instanz legst Du eine eigene System-DSN an:
WP_Kunden
WP_Bewerber
WP_Tickets
Alle DSNs müssen auf dem gleichen Access-Rechner eingerichtet sein.
Tabellenstruktur in Access
Ich nutze pro Quelle eine Roh-Tabelle:
import_kunden
import_bewerber
import_tickets
Und eine gemeinsame Zieltabelle:
CREATE TABLE staging_wp_events (
quelle TEXT(50),
event_id LONG,
user_email TEXT(255),
timestamp DATETIME,
status TEXT(50),
sync_datum DATETIME
)
Damit kannst Du später Auswertungen pro Mandant fahren.
1. Daten abrufen per SQL
Beispiel: Rohdaten aus wp_posts
bei Mandant „Kunden“
INSERT INTO import_kunden (post_id, user_email, datum, status)
SELECT ID, post_author, post_date, post_status
FROM [ODBC;DSN=WP_Kunden;].wp_posts
WHERE post_type = 'event'
Dasselbe machst Du für die anderen Mandanten, mit angepasstem DSN.
2. Einheitliche Übernahme ins zentrale Modell
Jetzt vereinheitlichst Du die Rohdaten in die Staging-Tabelle.
INSERT INTO staging_wp_events (quelle, event_id, user_email, timestamp, status, sync_datum)
SELECT 'kunden', post_id, user_email, datum, status, Now()
FROM import_kunden
UNION ALL
SELECT 'bewerber', post_id, user_email, datum, status, Now()
FROM import_bewerber
UNION ALL
SELECT 'tickets', post_id, user_email, datum, status, Now()
FROM import_tickets
Damit hast Du eine konsolidierte Sicht.
3. Automatisierung mit VBA
Sub AlleMandantenAktualisieren()
Importiere "WP_Kunden", "import_kunden"
Importiere "WP_Bewerber", "import_bewerber"
Importiere "WP_Tickets", "import_tickets"
VereinheitlicheDaten
End Sub
Sub Importiere(dsnName As String, zielTabelle As String)
Dim sql As String
sql = "INSERT INTO " & zielTabelle & _
" (post_id, user_email, datum, status) " & _
"SELECT ID, post_author, post_date, post_status " & _
"FROM [ODBC;DSN=" & dsnName & ";].wp_posts " & _
"WHERE post_type = 'event'"
DoCmd.SetWarnings False
DoCmd.RunSQL sql
DoCmd.SetWarnings True
End Sub
Sub VereinheitlicheDaten()
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE FROM staging_wp_events"
DoCmd.RunSQL CurrentDb.QueryDefs("qry_staging_union").SQL
DoCmd.SetWarnings True
End Sub
qry_staging_union
ist ein gespeicherter Union-Query wie oben beschrieben.
4. Beispiel: Bericht über alle Mandanten
SELECT quelle, Count(*) AS AnzahlEvents,
Min(timestamp) AS Erste, Max(timestamp) AS Letzte
FROM staging_wp_events
GROUP BY quelle
ORDER BY quelle
Damit erkennst Du z. B. inaktive Mandanten oder Synchronisationsprobleme.
5. E-Mail-Benachrichtigung bei Problemen
Beispiel: kein Eintrag in den letzten 3 Tagen
Function CheckAktivität()
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT quelle FROM staging_wp_events GROUP BY quelle HAVING Max(timestamp) < Date()-3")
Do While Not rs.EOF
Call SendeWarnung(rs!quelle)
rs.MoveNext
Loop
End Function
Sub SendeWarnung(mandant As String)
Dim olApp As Object, olMail As Object
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.CreateItem(0)
olMail.To = "admin@firma.de"
olMail.Subject = "Keine Daten von " & mandant
olMail.Body = "Seit mehr als 3 Tagen keine Daten von WordPress-Mandant '" & mandant & "' erhalten."
olMail.Send
End Sub
So ein Access als Zentrale kann auch für viele andere Wartungsaufgaben in verschiedenen WordPress Instanzen eingesetzt werden. Ich nutze es z.B. zur automatischen SEO-Optimierung mit ChatGPT.
Keine Antworten