|
Ich habe eine Haupt- und eine Detailtabelle 1:n verknüpft. Nun möchte ich beide Tabellen in einem Formular in der Datenansicht darstellen. Wenn ich in der Haupttabelle einen Datensatz auswähle, sollen automatisch die Daten in der Detailtabelle richtig dargestellt werden.MS Access: Synchronisieren von Unterformularen
Beispiele:
Sie sehen hier ein ungebundenes Access - Formular mit 2 Unterformularen. Links wird die Haupt- und rechts die Detailtabelle dargestellt. Im Augenblick wurde in der linken Tabelle der Eintrag "Staubsauger" markiert, die zum Staubsauger gehörenden Komponenten "Düse", "Schlauch", "Staubbeutel" usw. werden rechts dargestellt. |
1.) Tabellen
Um dieses Beispiel programmieren zu können benötigen Sie 2 Tabellen,
die mindestens folgende Felder enthalten müssen:
Haupttabelle:
Eigenschaft | Wert |
Tabellenname | Geräte |
Spalte 1: Name | GeräteID |
Spalte 1: Felddatentyp | AutoWert, Primärschlüssel |
Spalte 2: Name | Gerätebezeichnung |
Spalte 2: Felddatentyp | Text |
Detailtabelle:
Eigenschaft | Wert |
Tabellenname | Komponenten |
Spalte 1: Name | GeräteID |
Spalte 1: Felddatentyp | Long integer, Fremdschlüssel |
Spalte 2: Name | Bezeichnung |
Spalte 2: Felddatentyp | Text |
2.) Formulare
Zwei Unterformulare und ein Hauptformular werden benötigt. Die
beiden Unterformulare benötigen jeweils mindestens ein Textfeld als
Steuerelement.
Geräte-Unterformular:
Steuerelement | Eigenschaft | Wert |
Formular | Formularname | sfrmGeräte |
Formular | Datenherkunft | Geräte |
Formular | Standardansicht | Datenblatt |
Formular | Beim Anzeigen (Form_Current) | [Ereignisprozedur] |
txtGerätebezeichnung | Typ | Textfeld |
txtGerätebezeichnung | Name | txtGerätebezeichnung |
txtGerätebezeichnung | Steuerelementinhalt | Gerätebezeichnung |
Komponenten-Unterformular:
Steuerelement | Eigenschaft | Wert |
Formular | Formularname | sfrmKomponenten |
Formular | Datenherkunft | Komponenten |
Formular | Standardansicht | Datenblatt |
txtBezeichnung | Typ | Textfeld |
txtBezeichnung | Name | txtBezeichnung |
txtBezeichnung | Steuerelementinhalt | Bezeichnung |
Beachten sie bitte, daß die Unterformulare nicht unbedingt die Felder [GeräteID] (Primär- bzw. Fremdschlüssel) enthalten müssen!
Hauptformular:
Steuerelement | Eigenschaft | Wert |
Formular | Formularname | frmStücklisten |
Formular | Datenherkunft | - keine - (ungebunden) |
Formular | Standardansicht | Einzelnes Formular |
sfrmGeräte | Typ | Unterformular |
sfrmGeräte | Name | sfrmGeräte |
sfrmGeräte | Steuerelementinhalt | sfrmGeräte |
sfrmKomponenten | Typ | Unterformular |
sfrmKomponenten | Name | sfrmKomponenten |
sfrmKomponenten | Steuerelementinhalt | sfrmKomponenten |
sfrmKomponenten | Verknüpfen von (Link child field) | GeräteID |
sfrmKomponenten | Verknüpfen nach (Link master field) | [sfrmGeräte]![Form].[GeräteID] |
Korrektur vom 04.06.2003:
Die letzte Zeile in der vorherigen Tabelle ist falsch! Richtig ist hingegen:
sfrmKomponenten | Verknüpfen nach (Link master field) | [sfrmGeräte].[Form]![GeräteID] |
Ausrufezeichen und Punkt wurden seinerzeit versehentlich vertauscht. Na klar: wir benötigen die Form-Eigenschaft von sfrmGeräte, um so auf das Feld GeräteID innerhalb des Unterformulares verweisen zu können. Sorry und Danke an Ulrich Mikge.
Beachten Sie bitte, wie die Verknüpfung formuliert wird!
3.) Programmcode
Wenn sie die Tabellen aufmerksam studiert haben
wird Ihnen nicht entgangen sein, das der Eigenschaft "Beim Anzeigen" des
Unterformulars [sfrmGeräte] der Wert "Ereignisprozedur" zugewiesen
wurde. Diese Prozedur ist natürlich noch leer und wird nun noch mit
folgendem Code gefüllt:
Option Compare Database4.) Kompilieren, speichern und ausprobieren!
Option ExplicitPrivate Sub Form_Current()
Dim ParentDocName As String' Prüfe, ob ein Hauptformular existiert
On Error Resume Next
ParentDocName = Me.Parent.Name
' falls dieses Formular allein geöffnet wurde
' und nicht als Bestandteil eines Hauptformulares,
' wird hier ein Fehler signalisiert und abgefangen.If Err <> 0 Then
GoTo Form_Current_Exit
Else
On Error GoTo Form_Current_Err
Me.Parent![sfrmKomponenten].Requery
End If
Form_Current_Exit:
Exit Sub
Form_Current_Err:
MsgBox Error$
Resume Form_Current_Exit
End Sub
|
© 1999 - 2003 T. Prötzsch |
Aktualisiert am 04. Juni 2003
|