Data Watch - Einsatz am Limit

Bessere Bearbeitung

Möglicherweise ist aber der Benutzer jetzt zwar zufrieden, aber nicht wirklich glücklich. Schließlich weiß er nun, welches Problem er hat, nicht jedoch, wie er es lösen kann. Eine deutliche Verbesserung der Benutzerführung wäre es, per Klick neben der Zeile direkt in das passende Formular zu gelangen.

Zu jeder Abfrage muss also die Information gespeichert werden, welches Formular die passenden Daten anzeigen kann. Mit sehr viel Glück könnten Sie den Namen des Formulars im Abfragenamen wieder finden, wahrscheinlich gehören aber mehrere Abfragen zum gleichen Formular, so dass Ihr Glück schon bald überstrapaziert wäre.

Zusatzinformationen in Eigenschaften

Schreiben Sie den Formularnamen stattdessen in eine Abfrage-Eigenschaft, haben Sie wieder jede nötige Freiheit. Nicht die einzige, aber die bequemste ist die Eigenschaft Description, also die Beschreibungs-Eigenschaft, weil sie von jedem Benutzer per Rechtsklick auf den Namen und der Menüauswahl gepflegt werden kann.

Im Endlosformular frmAnalyse gibt es also im Detailbereich eine Schaltfläche btnFormular mit dem Code aus Listing 8.

Da fehlende Einträge in der Beschreibung keinen Leerstring liefern, sondern eine Fehlermeldung auslösen, muss das entsprechend berücksichtigt werden.

Private Sub btnFormular_Click()
Dim qryAktuell As QueryDef
Dim strFormular As String
Set qryAktuell = CurrentDb.QueryDefs( _
"qry" & Me.QTyp.Value & Me.QName.Value)
'Fehler aus, weil Beschreibung/Description-Eigenschaft
'fehlen könnte
On Error Resume Next
strFormular = qryAktuell.Properties("Description").Value
If Err.Number = 0 Then
On Error GoTo 0
DoCmd.OpenForm strFormular
Else
MsgBox "Formularname für " & Me.QName.Value & " fehlt!", _
vbCritical
End If
End Sub

Mehrere Parameter

Vor allem aber sollen in dem angezeigten Formular ja nur noch bestimmte Datensätze angezeigt werden. Außer dem Formularnamen muss dort daher noch ein Feldname gespeichert werden, für den der Filter gilt. Um die Parameterübergabe einfach zu halten, stehen diese Feldnamen alle in der Beschreibungs-Eigenschaft und werden durch senkrechte Striche getrennt.

Über die Filter-Eigenschaft des Formulars können Sie nun dafür sorgen, dass nur noch diejenigen Datensätze angezeigt werden, deren eindeutiges Feld in der Analyseabfrage genannt war. Dazu nutzen Sie geschachtelte SQL-Statements mit dem IN-Operator wie beispielsweise in

…WHERE [ID1] IN (SELECT [ID2] FROM [qryDemo])'

Dabei liefert das eingeklammerte SELECT eine Liste von [ID2]-Feldern, zu denen dann in der aufrufenden Abfrage die passenden Datensätze angezeigt werden. Für die Filter-Eigenschaft des Formulars wird später natürlich das Schlüsselwort WHERE weggelassen.