Forum des Access-Tutorials

Untereinträge durchlaufen (VBA)

Nikno, Mittwoch, 17. Mai 2017, 14:42 (vor 7 Tagen)

Hallo,

ich habe ein verschachteltes Unterformular, also ein Unterformular frmA, das ein Unterformular frmB enthält. Das führt in Datenblattansicht zu einer ausklappbaren Ansicht.

Nun möchte ich die Daten aus dieser Ansicht abgreifen. Da treffe ich auf 2 Probleme, die ich bisher nur sehr hässlich umgangen habe:

1) Möchte ich nur einen Datensatz durchlaufen, funktioniert das wunderbar mit:

Dim rst As DAO.Recordset
Set rst = Forms!frmA.Form.RecordsetClone
 
Do Until rst.EOF
    'Etwas machen
    rst.MoveNext
Loop

Möchte ich nun aber meinen verschachtelten durchlaufen, funktioniert das nicht mit:

Dim rst As DAO.Recordset
Dim subrst As DAO.Recordset
Set rst = Forms!frmA.Form.RecordsetClone
 
Do Until rst.EOF
    Set subrst = Forms!frmA.Form!frmB.Form.RecordsetClone
 
    Do Until subrst.EOF
        'Etwas machen
        subrst.MoveNext
    Loop
rst.MoveNext
Loop


Stattdessen wird immer nur der erste Datensatz durchlaufen. Das liegt wohl daran, weil der Datensatz von frmB nie geändert wird und immer beim ersten bleibt.

Wenn ich Set rst = Forms!foo.Form.RecordsetClone
zu Set rst = Forms!foo.Form.Recordset ändere, funktioniert es, aber es sucht dann natürlich in der aktiven Ansicht, was sehr hässlich und langsam ist. Ich vermute das muss ich irgendwie mit Bookmark machen, aber ich habe keine Ahnung wie. :)

2) Hängt vielleicht mit 1 zusammen, die Datensätze sind standardmäßig eingeklappt. Wenn ich diese durchlaufen möchte, muss ich die vorher mit Code ausklappen, was eine Weile dauert. Vielleicht erübrigt sich das ja, wenn 1) elegant gelöst wird.

Untereinträge durchlaufen

Martin Asal, Mittwoch, 17. Mai 2017, 16:00 (vor 7 Tagen) @ Nikno

Stattdessen wird immer nur der erste Datensatz durchlaufen. Das liegt wohl daran, weil der Datensatz von frmB nie geändert wird und immer beim ersten bleibt.

Es soll wohl heißen, es werden immer die Datensätze durchlaufen, die zu frmA gehören? (Habe es nicht getestet, aber ich halte es für wahrscheinlich)

Grundsätzlich halte ich dein Vorgehen ohnehin nicht für effektiv. Anstatt auf die Datensätze in einem (Unter)Formular zu gehen, würde ich auf die Datensätze einer Abfrage gehen. Deine (Unter)Formulare haben schließlich wohl ohnehin schon eine Abfrage als Datensatzquelle. Das ist schneller und mit Sicherheit einfacher umzusetzen.

Martin

RSS-Feed dieser Diskussion
RSS Einträge  RSS Threads   Kontakt
powered by my little forum