Tipps "n" Tricks
Anwender-Software - Access

Last Update: 24. Dezember 2001/Webmaster

Datenauswahl per Popup-Formular
Thema: Access 97/2000
  Wenn Sie eine Funktion zum direkten Anwählen eines Datensatzes in ein Formular implementieren möchten, verwenden Sie dazu in der Regel ein Kombinationslistenfeld, dem eine entsprechende Abfrage zugrunde liegt. Nach Auswahl eines Eintrages wird der dazugehörige Datensatz angezeigt. Bis zu einer gewissen Anzahl von Datensätzen ist diese Lösung praktikabel, aber bei grösseren Beständen ist das Kombinationslistenfeld recht langsam. Die im folgenden beschriebene Lösung zeigt, wie Sie statt dessen ein übersichtliches und schnelleres Auswahlformular einsetzen.

Die Lösung arbeitet mit einem zusätzlichen Formular "frmAuswahl", das über eine Schaltfläche "btnAuswahl" aus dem Hauptformular heraus aufgerufen wird. Im Formular ist eine dreispaltige Liste "lstAuswahl" vorhanden, der eine Abfrage zugrunde liegt, die drei Felder liefert: Name der Firma, Ort und eindeutiges Zugriffskriterium (im Beispiel das Feld "Kunden-Code"). Die Liste zeigt nur die beiden ersten Felder für die Auswahl an. Die dritte Spalte ist die gebundene Spalte und versteckt formatiert (Eigenschaft "Spaltenbreite" = "5cm;5cm;0cm"). Wenn ein Eintrag ausgewählt wird, dient der Inhalt der dritten, versteckten Spalte dazu, im Hauptformular auf den entsprechenden Datensatz zu positionieren. Die Ereignisprozedur "Beim Klicken" der Schaltfläche "btnAuswahl" im Hauptformular steuert die gesamte Funktion:

Sub btnAuswahl_Click ()
  Dim strX As String

  DoCmd OpenForm "frmAuswahl", A_Normal, , , , A_Dialog
  On Error Resume Next
  strX = Forms![frmAuswahl].Tag
  DoCmd Close A_Form, "frmAuswahl"
  If Err <> 0 Or strX="" Then Exit Sub
  On Error GoTo 0

  Me.[Kunden-Code].SetFocus
  DoCmd FindRecord strX, A_Entire, , A_Down, , _
  A_Current, True
  Me.[Firma].SetFocus

End Sub

Zunächst wird das Formular "frmAuswahl" als Dialog/Popup angezeigt. Der darin enthaltenen Liste "lstAuswahl" liegt die Abfrage "AFfrm Auswahl" zugrunde, die die benötigten Felder "Firma", "Ort" und "Kunden-Code" liefert.

Wenn im Popup-Formular ein Eintrag markiert und auf OK geklickt oder ein Doppelklick auf einen Eintrag ausgeführt wird, sorgt die Prozedur "Beim Klicken" der Schaltfläche "btnOK" im Formular "frmAuswahl" dafür, dass das Zugriffskriterium, hier "Kunden-Code", über die Eigenschaft "Tag" des Formulars festgehalten wird:

Private Sub btnOK_Click()
  Dim intIdx As Integer, strX As String

  intIdx = Me.lstAuswahl.ListIndex
  If intIdx < 0 Then
    Beep
    Exit Sub
  End If

  strX = Me.lstAuswahl.Column(2)
  Me.Tag = strX
  Me.Visible = False

End Sub

Klickt der Anwender auf Abbrechen, muss die Tag-Eigenschaft auf einen leeren String gesetzt werden:

Private Sub btnCancel_Click()

  Me.Tag = ""
  Me.Visible = False

End Sub


In der Ereignisprozedur des Hauptformulars prüfen wir den Inhalt von "Tag" - ist dieser leer, wurde auf Abbrechen geklickt, andernfalls stellt der Inhalt den Kundencode für den anzuzeigenden Datensatz dar. Über "FindRecord" wird dann auf diesen Datensatz positioniert.

Wenn Sie diese Lösung in Ihre eigene Projekte einbauen möchten, benötigen Sie zunächst das Formular "frmAuswahl" und eine zugehörige Abfrage namens "AFfrm Auswahl", die die drei Felder für die Liste liefert. Beachten Sie dabei, dass die ersten beiden Felder für die Anzeige dienen und das dritte Feld ein Zugriffskriterium wie beispielsweise eine Artikel- oder Lieferantennummer sein soll.

Öffnen Sie das betreffende Hauptformular im Entwurfsmodus und legen Sie dort eine neue Schaltfläche "btnAuswahl" an. Stellen Sie deren Eigenschaft "Beim Klicken" auf "[Ereignisprozedur]" und klicken Sie auf die Schaltfläche mit den drei kleinen Punkten, um den VBA-Editor zu starten.

Geben Sie dann die oben im Listing "Sub btnAuswahl_Click" gezeigten Anweisungen ein und passen Sie dabei die folgenden Zeilen an Ihr Hauptformular an:

Me.[Kunden-Code].SetFocus
DoCmd FindRecord strX, A_Entire, , A_Down, , _
A_Current, True
Me.[Firma].SetFocus


"Kunden-Code" ersetzen Sie dabei durch den Namen des Feldes, das das Zugriffskriterium darstellt.Für "Firma" verwenden Sie den Namen des Feldes, das anschliessend als aktives Feld selektiert werden soll.

 

Tipps "n" Tricks
Anwender-Software - Access