Datenmanipulation

Hallo Leute,
Ich habe zwei miteinander verknüpfte Tabellen. Die Tabelle1, meine Haupttabelle und die Tabelle2, meine Nebentabelle, sind mit einer 1:n Beziehung miteinander verbunden.
Da nicht jeder Datensatz in meiner Haupttabelle (Tabelle1)einen dazugehörigen Satz in der Nebentabelle (Tabelle2) hat, möchte ich in der Haupttabelle einen Hinweis auf einen evtl. vorhandenen, Eintrag in der Nebentabelle geben. Ich habe dazu eine Spalte „Swap“ (Wahr/Falsch) in der Haupttabelle eingerichtet und lasse das folgende Modul darüberlaufen.

Public Sub Zugriff2()

Dim db As DAO.Database, rs As DAO.Recordset

Set db = CurrentDb

Set rs = db.OpenRecordset(„Tabelle1“, dbOpenDynaset) 'Haupttabelle
Set rm = db.OpenRecordset(„Tabelle2“, dbOpenDynaset) 'Nebentabelle
Do Until rs.EOF
rs.Edit
If rm![Nennwert] > „“ Then
rs![Swap] = True
Else
rs![Swap] = False
End If
rs.Update
Debug.Print rs![Swap]

rs.MoveNext
rm.MoveNext

Loop
rs.Close
rm.Close
Set rs = Nothing
Set rm = Nothing
End Sub

Leider durchläuft diese Schleife die Nebentabelle einfach bis zu deren letztem Datensatz und hört dann auf.
Kann mir jemand helfen, wie ich das anders hinbekomme ?

Gruß Christian

Moin, Christian,

möchte ich in der Haupttabelle einen Hinweis
auf einen evtl. vorhandenen, Eintrag in der Nebentabelle
geben.

das ist ein Kunstfehler, weil damit eine Redundanz entsteht. Wenn die zugehörigen Sätze aus der Nebentabelle verschwinden, stimmt der Hinweis nicht mehr.

Leider durchläuft diese Schleife die Nebentabelle einfach bis
zu deren letztem Datensatz und hört dann auf.

Das Recordset für die Nebentabelle muss passend zum Satz der Haupttabelle jedesmal neu gesetzt werden, sonst hast Du immer die ganze Tabelle am Wickel.

Gruß Ralf

Moin Ralf,

das ist ein Kunstfehler, weil damit eine Redundanz entsteht.
Wenn die zugehörigen Sätze aus der Nebentabelle verschwinden,
stimmt der Hinweis nicht mehr.

was muss ich mir unter einer Redundanz vorstellen ? und wie kann ich das anders lösen ?
Mein Ziel ist, eine Abfrage zu erstellen, welche Datensätze in der Haupttabelle zwar vorhanden sind, aber noch kein Wiedereingangsdatum haben und mit einem oder mehreren verknüpfte Datensätze in der Nebentabelle in Beziehung stehen.

Das Recordset für die Nebentabelle muss passend zum Satz
der Haupttabelle
jedesmal neu gesetzt werden, sonst hast
Du immer die ganze Tabelle am Wickel.

Geh ich denn von der falschen Seite (Tabelle) an die Sache heran ?

Wäre es nicht klüger, die Nebentabelle nach Einträgen zu durchsuchen und wo ein Datensatz ist, die Haupttabelle zu manipulieren ?

Gruß Christian

Hallo,

und WOZU, bzw. für WAS mußt Du wissen, daß die n-Tabelle keinen zugehörigen Eintrag hat?

Sowas (die Anzahl der DS in der n-Tabelle) kann man einfach so berechnen im Hauptformular (Datenherkunft 1-Tabelle) im Steuerelementinhalt eines Textfeldes:

=DomAnzahl("*";„tbl_n_Tabelle“;„FK=“ & [PK])

Dabei ist „FK“ das Fremdschlüsselfeld in der n-Tabelle und PK das Textfeld im Formular, das den Primärschlüssel(wert) der 1-Tabelle anzeigt.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hi Christian,

was muss ich mir unter einer Redundanz vorstellen ?

eine Info, die mehrfach vorliegt: Nebensatz ist vorhanden (weil er existiert), zusätzlich sagt das Kennzeichen im Hauptsatz: Nebensatz ist vorhanden.

und wie kann ich das anders lösen ?

Das hängt von Deiner Anwendung ab. Eine Möglichkeit wäre, eine View anzulgen, die nur die Hauptsätze zeigt, die einen Nebensatz haben - oder eben nicht.

Mein Ziel ist, eine Abfrage zu erstellen, welche Datensätze in
der Haupttabelle zwar vorhanden sind, aber noch kein
Wiedereingangsdatum haben und mit einem oder mehreren
verknüpfte Datensätze in der Nebentabelle in Beziehung stehen.

Prinzipiell:

 Select from t1, t2
 where t1.Wiedereingangsdatum is null
 and exists (select t1\_id from t2 where t2.t1\_id = t1.t1\_id)

Wäre es nicht klüger, die Nebentabelle nach Einträgen zu
durchsuchen und wo ein Datensatz ist, die Haupttabelle zu
manipulieren ?

Klüger wäre eine Lösung, die das Manipulieren des Hauptsatzes überflüssig macht.

Gruß Ralf

Hallo Ralf,

Klüger wäre eine Lösung, die das Manipulieren des Hauptsatzes
überflüssig macht.

und die wäre ?

Gruß Christian

Hallo Ralf,

Klüger wäre eine Lösung, die das Manipulieren des Hauptsatzes
überflüssig macht.

und die wäre ?

diejenige, die wir Dir vorschlagen, wenn Du meine o. st. Fragen beantworten würdest…

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Also, ich versuch das mal zu erklären.
ein Einzelgeschäft (erfasst in der Nebentabelle) darf eigentlich nur zu stande kommen, wenn ein Rahmenvertrag (erfasst in der Haupttabelle) vom Kunden unterzeichnet zurückgekommen ist. Daher wird bei Ausfertigung des Rahmenvertrages in der Spalte „Eingangsdatum“ noch nichts erfasst.
Erst wenn der Rahmenvertrag (die allgemeinen Geschäftsbedingungen durch den Kunden mit seiner Unterschrift akzeptiert wurde wird ein Eingangsdatum gesetzt. Es kommt aber vor, dass Einzelgeschäfte bereits abgeschlossen werden, obwohl der Rahmenvertrag zwar erstellt und versand ist, aber noch nicht wieder eingetroffen ist. Diese Geschäfte sind also als „kritisch“ einzustufen.
Ich benötige also eine Abfrage, bei der ich sehen kann, 1. der Rahmenvertrag ist noch nicht wieder eingetroffen (Spalte Eingengsdatum „Ist Null“) und 2. Spalte Einzelgeschäft (Einzelgeschäft ist vorhanden „Ist nicht Null“).
Dafür muss ich in der Abfrage eine Spalte einfügen und über einen SQL-String beide Bedingungen unter einen Hut bekommen oder in einem Klammernpaar verhaften.

Doch wie ?!

Gruß Christian

Ich hoffe alle Klarheiten beseitigt zu haben.
oder sind noch Fragen offen geblieben ?

Hallo Christian,

ein Einzelgeschäft (erfasst in der Nebentabelle)

das ist nie gut, zusammengehörige Daten separat zu verwalten!

eigentlich nur zu stande kommen, wenn ein Rahmenvertrag
(erfasst in der Haupttabelle)

das sollte eine extra Tabelle sein und NICHT die Haupttabelle!!

vom Kunden unterzeichnet zurückgekommen ist.

Der Kunde sollte die Haupttabelle sein!!

Erst wenn der Rahmenvertrag (die allgemeinen
Geschäftsbedingungen durch den Kunden mit seiner Unterschrift
akzeptiert wurde wird ein Eingangsdatum gesetzt. Es kommt aber
vor, dass Einzelgeschäfte bereits abgeschlossen werden, obwohl
der Rahmenvertrag zwar erstellt und versand ist, aber noch
nicht wieder eingetroffen ist. Diese Geschäfte sind also als
„kritisch“ einzustufen.

hmm, das ist Sache der Geschäftspolitik, dazu möchte ich nicht sagen :frowning:

Ich benötige also eine Abfrage

nein benötigst du nicht! Du kannst die Funktion DLOOKUP verwenden, um deine Kontrolle durchzuführen.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)