Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Daten in einer Tabelle regelmäßig in normalisierte Tabellen verschieben

Begonnen von haha, Oktober 21, 2025, 15:14:49

⏪ vorheriges - nächstes ⏩

haha

Hallo,
in eine Tabelle "tbl_BuchungenRoh" mit den Feldern:
B_Blz (Kurzer Text),
B_Kto (Kurzer Text),
B_Datum (Datum/Uhrzeit),
B_Betrag (Währung),
B_Art (Kurzer Text),
B_Name (Kurzer Text),
B_Text1 (Kurzer Text),
B_Text2 (Kurzer Text),
B_Text3 (Kurzer Text),
B_Text4 (Kurzer Text),
B_Kat (Kurzer Text),
sollen regelmäßig Bankdaten aus einer txt-Datei importiert werden. Diese Tabelle hat keinen Primärschlüssel und es gibt auch zum Teil leere Felder (Feld B_Kat ist zudem komplett leer und soll erst viel später über ein Formular mit Kategorisierungsdaten gefüllt werden).

Die Daten aus "tbl_BuchungenRoh" sollen dann regelmäßig wie folgt verschoben werden in normalisierte Tabellen;
,,tbl_Buchungen"    -> Felder: B_ID, B_Datum, B_Betrag, B_Text1, B_Text2, B_Text3, B_Text4, B_KontoID, B_ArtID, B_NameID, B_KatID
,,tbl_BuchungenKonto"    -> Felder: B_KontoID, B_Blz, B_Kto
,,tbl_BuchungenArt"    -> Felder: B_ArtID und B_Art
,,tbl_BuchungenName"    -> Felder: B_NameID und B_Name
,,tbl_BuchungenKat"    -> Felder: B_KatID und B_Kat
Wichtig hierbei, dass bereits vorhandene Datensätze nicht in die normalisierten Tabellen verschoben werden (doppelte Datensätze ausschließen).
Nach dem Verschieben sollen die Daten in "tbl_BuchungenRoh" gelöscht werden.

Hier meine Fragen:
1.   Verständnisfrage zu den Beziehungen der normalisierten Tabellen: Ist z.B. folgende Beziehung korrekt: ,,tbl_BuchungenKonto" 1:n ,,tbl_Buchungen" mit referentieller Integrität und Verknüpfungstyp 1?

2.   Hat jemand einen VBA-Beispielcode, der Verschiebung von Daten aus einer Tabelle in mehrere normalisierte Tabellen durchführt und hierbei doppelte Datensätze ausschließt?

3.   Gibt es zu meinem angedachten/gewünschten Modell Bedenken oder Einwände? Wenn ja, welche?


Ich hoffe ich konnte mein Anliegen halbwegs verständlich rüber bringen und wäre sehr dankbar für eure Hilfe.

Viele Grüße
HaHa

PhilS

Zitat von: haha am Oktober 21, 2025, 15:14:492.   Hat jemand einen VBA-Beispielcode, der Verschiebung von Daten aus einer Tabelle in mehrere normalisierte Tabellen durchführt und hierbei doppelte Datensätze ausschließt?
Mit ist generell unklar, ob du dich mit "doppelte ausschließt" auf den Prozess mit den aktuell in der Temp-Tabelle vorhandenen Daten beziehst, oder ob du generell meinst das mehrfache Datensätze auch in mehrfachen Import-Prozessen ausgeschlossen werden sollen.

Bank-Kontobewegungen sind in diesem Kontext eine echte Plage, weil die Daten die man meistens bekommt selbst über alle Spalten nicht zwingend eindeutig sind.
Ich würde in deiner Temp-Tabelle eine AutoNummer-Spalte als Primärschlüssel ergänzen, damit du zumindest die Daten aus dem jeweils aktuellen Batch eindeutig identifizieren kannst.
Ich würde die verarbeiteten Daten auch länger aufheben und mit einem Erledigt-Kennzeichen versehen.
Auf Basis der alten Daten kannst du dann Wahrscheinlich-Doppelte erkennen und durch den Benutzer bestätigen lassen.



Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

haha

Hallo PhilS,

vielen Dank für deine schnelle Hilfe und für die Vorschläge.

Mein Plan zu den Doppelte Datensätze:
Falls beim Kopieren der Daten aus "tbl_BuchungenRoh" in die normalisierten Tabellen dort (also in den normalisierten Tabellen) bereits ein "gleicher Datensatz" (alle Felder bis auf "B_Kat" identischer Inhalt oder identisch leer) vorliegt, dann nicht nochmal einfügen.

(in der "tbl_BuchungenRoh" selbst kann es keine doppelten Datensätze geben; wird bereits vorher ausgeschlossen).

Deine Bedenken "echte Plage" und "nicht zwingend eindeutig" kann ich absolut nachvollziehen.

Ich gehe in meine Fall aber mal davon aus, dass die Daten über alle Felder doch eindeutig sind. Deshalb trotzdem die Frage/Bitte: ob es einen Beispielcode für meinen "Plan" gibt.

Vielen Dank!

Beaker s.a.

Hallo,
Die Frage, die sich mir gestern als erste stellte war, - kann es denn sein,
dass es in den Rohdaten neue Einträge für die n-Tabellen gibt? Ausser
den Kontendaten sind das doch alles Typisierungstabellen, und die sollten m.E.
feststehen.

Um doppelte Importe zu vermeiden, würde ich Philips Vorschlag ein Flag dafür
in "tbl_BuchungenRoh" anzulegen übernehmen. Ich würde allerdings einen Timestamp
statt eines Boolean bevorzugen. Da kannst du eine gespeicherte Abfrage auf die
Tabelle erstellen, die direkt auf
Timestamp Is Null    'bzw. mit Bool "bearbeitetJN = False" gefiltert ist.

Das Problem sind die fehlenden Schlüsselfelder für die n-Tabellen. Da musst
du dir mal deine Daten anschauen und nach möglichen eindeutigen Feldern neben
dem PK durchsuchen.

Den Import würde ich wohl so ansetzen (in Prosa)
RS öffnen auf die "qryRohdaten" (s.o.) und alle anderen Tabellen
Variablen für die Schlüsselfelder deklarieren
Schleife durch "qryRohdaten"
zuerst die n_Tabellen prüfen*) ob DS vorhanden, -
wenn NEU -> DS anlegen
ID merken
DS anlegen in "tbl_Buchungen" mit den Daten aus "qryRohdaten" und den Inhalten
der Schlüsselfeldvariablen,
Timestamp in "qryRohdaten" setzen.

*) wie das machen könnte hängt von deinen Daten ab.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

haha

Super, vielen Dank für die Anregungen und Erklärungen.
Ihr seid super!!!
Ich werde versuchen dies Schritt für Schritt umzusetzen.