ACC2002: Verwendung parametrisierter Kombinationsfelder in einem Access-Projekt

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 281870 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D281870
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
281870 ACC2002: How to Use Parameterized Combo Boxes in an Access Project
Moderat: Erfordert grundlegende Kenntnisse in den Bereichen Makros, Kodierung und Interoperabilität.

Die Informationen in diesem Artikel beziehen sich ausschließlich auf Microsoft Access-Projekte (.adp).

Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Kombinationsfelder sind ein guter Weg, einem Benutzer verschiedene Auswahlmöglichkeiten anzubieten. Falls die Datensatzherkunft für ein Kombinationsfeld auf einem Teilsatz von Datensätzen aus einer Tabelle oder Abfrage basieren muss, können Sie die Anzahl der Auswahlmöglichkeiten durch Hinzufügen einer WHERE-Klausel einschränken.

Bei dem Beispiel in diesem Artikel wird dem Formular "Customers" (Kunden) im Beispielprojekt "NorthwindCS.adp" ein Kombinationsfeld hinzugefügt. In diesem Kombinationsfeld werden die von dem jeweiligen Kunden aufgegebenen Bestellungen aufgelistet. Ist es ausgewählt, wird das Formular "Orders" (Bestellungen) mit den Details zu der ausgewählten Bestellung geöffnet.

Es gibt vier verschiedene Methoden, eine Liste mit zueinander passenden Bestellungen auflisten zu lassen, die von einem Kunden aufgegeben wurden. Bei allen diesen Methoden wird ein Access-Projekt (.adp) mit Microsoft SQL Server 2000 als Datensatzherkunft verwendet. In dem folgenden Abschnitt werden diese Methoden beschrieben.

Weitere Informationen

Erstellen des Kombinationsfeldes

In diesem Abschnitt wird demonstriert, wie Sie zunächst ein Kombinationsfeld auf dem Formular "Customers" (Kunden) erstellen, in dem eine Liste der Bestellungen des aktuellen Kunden angezeigt wird.
  1. Öffnen Sie das Formular "Customers" in der Entwurfsansicht.
  2. Klicken Sie in der Toolbox auf Steuerelementassistenten und fügen Sie dem Formular dann ein Kombinationsfeld hinzu.
  3. Wählen Sie auf der ersten Seite des Assistenten die Option, die Werte in einer Tabelle oder Abfrage suchen zu lassen, und klicken Sie dann auf Weiter.
  4. Klicken Sie auf der zweiten Seite des Assistenten die Tabelle "Orders" (Bestellungen) an und klicken Sie dann auf Weiter.
  5. Auf der dritten Seite des Assistenten fügen Sie bitte die Felder "OrderID" (Bestell-Nr), "CustomerID" (Kunden-Nr) und "OrderDate" (Bestelldatum) in das Kombinationsfeld ein. Klicken Sie danach auf Weiter.
  6. Auf der vierten Seite des Assistenten deaktivieren Sie bitte die Option Schlüsselspalte ausblenden und verkleinern Sie dann die Spalte "CustomerID", bis sie nicht mehr sichtbar ist. Klicken Sie auf Weiter.
  7. Auf der fünften Seite des Assistenten klicken Sie auf Weiter, um "OrderID" als Feld zum Speichern in Ihrer Datenbank zu akzeptieren.
  8. Auf der sechsten Seite des Assistenten merken Sie sich bitte den Wert, um ihn später verwenden zu können, und klicken Sie dann auf Weiter.
  9. Auf der letzten Seite des Assistenten geben Sie dem Kombinationsfeld den Titel Select Order (Bestellung auswählen) und klicken Sie dann auf Fertig stellen.
  10. Öffnen Sie das Eigenschaftenblatt für das Kombinationsfeld und ändern Sie dort den Namen des Kombinationsfeldes zu SelectOrderCombo.
  11. Legen Sie die Eigenschaft BeimKlicken des Kombinationsfeldes auf die folgende Ereignisprozedur fest:
    Private Sub SelectOrderCombo_Click()
    On Error GoTo Err_SelectOrderCombo_Click
        Dim stDocName As String
        Dim stLinkCriteria As String
    
        stDocName = "Orders"
    
        stLinkCriteria = "[OrderID]=" & Me![SelectOrderCombo]
        DoCmd.OpenForm stDocName, , , stLinkCriteria
    
    Exit_SelectOrderCombo_Click:
        Exit Sub
    
    Err_SelectOrderCombo_Click:
        MsgBox Err.Description
        Resume Exit_SelectOrderCombo_Click
    
    End Sub

Code hinzufügen, um das Kombinationsfeld zu aktualisieren

Der folgende Abschnitt beschreibt die Methoden, die Sie anwenden können, um das Kombinationsfeld zu aktualisieren. Entscheiden Sie sich bitte für eine der folgenden vier Methoden und fügen Sie dann den entsprechenden Code dem Ereignis "BeimHingehen" des Kombinationsfeldes hinzu.

Bei den Methoden 1 und 2 setzt das Ereignis "BeimKlicken" bei jedem Auswählen des Kombinationsfeldes die Datensatzherkunft für das Kombinationsfeld zurück, um nur die Bestellungen anzuzeigen, die zu dem aktuellen Kunden gehören.

Anmerkung: Da das Feld "CustomerID" ein Textfeld ist, müssen einfache Anführungszeichen (') um den Verweis "Forms" herum verkettet werden. So wird beispielsweise die generierte WHERE-Klausel konvertiert von:
WHERE CustomerID = '" & Forms![Customers]![CustomerID] & "'"
zu:
WHERE CustomerID = 'ALFKI'

Methode 1: Ad-hoc-Auswahl

Legen Sie die Eigenschaft BeimHingehen des Kombinationsfeldes auf die folgende Ereignisprozedur fest:
Me.SelectOrderCombo.RowSource = "SELECT TOP 100 PERCENT OrderID, CustomerID, OrderDate FROM Orders WHERE " _
     & "CustomerID = '" & Forms![Customers]![CustomerID] & "' ORDER BY OrderDate DESC"

Methode 2: Verwendung der SQL Server-Ansicht

  1. Erstellen Sie im Ansichtendesigner eine neue Ansicht und wählen Sie dann aus der Tabelle "Orders" (Bestellungen) die Felder "OrderID", "CustomerID" und "OrderDate" aus. Um die Liste der Bestellungen nach ihrem Datum von "neu" nach "alt" sortieren zu lassen, legen Sie bitte den Sortiertyp für das Feld "OrderDate" auf Absteigend fest.
  2. Speichern Sie die Ansicht unter dem Namen "vwCustomerOrders".
  3. Legen Sie die Eigenschaft BeimHingehen des Kombinationsfeldes auf die folgende Ereignisprozedur fest:
    Me.SelectOrderCombo.RowSource = "SELECT * FROM vwCustomerOrders WHERE CustomerId = '" & Forms![Customers]![CustomerID] & "'"
Bei den Methoden 3 und 4 wird bei dem Ereignis "BeimHingehen" die Kombinationsfeldmethode Requery (Erneute Abfrage) aufgerufen, um eine gespeicherte Prozedur oder SQL-Funktion erneut auszuführen und so die passenden Datensätze zurückmelden zu lassen. Bei den folgenden Beispielen wird der Parameter als Steuerelement auf dem Formular definiert, wobei in den Kriterien @ControlName verwendet wird. Access wertet automatisch die Kriterien aus und fragt dann die passenden Datensätze ab.

In den folgenden Beispielen meldet das Kombinationsfeld eine Liste aller Bestellungen des aktuellen Kunden zurück. Da das Textfeld "CustomerID" die aktuelle Kunden-Nr. enthält, können Sie in den Kriterien der gespeicherten Prozedur oder SQL-Funktion direkt auf das Textfeld "CustomerID" verweisen.

Methode 3: Verwendung einer gespeicherten SQL-Prozedur

  1. Erstellen Sie im Grafikdesigner eine neue Prozedur.
  2. Wählen Sie die Tabelle "Orders" (Bestellungen) aus und fügen Sie der gespeicherten Prozedur dann die Felder "OrderID", "CustomerID" und "OrderDate" hinzu.
  3. Geben Sie @CustomerID als Kriterium für das Feld "CustomerID" ein und sortieren Sie dann das Feld "OrderDate" in absteigender Reihenfolge.
  4. Speichern Sie die Prozedur unter dem Namen "spCustomerOrders" und schließen Sie sie dann.
  5. Legen Sie die gespeicherte Prozedur "spCustomerOrders" als Datensatzherkunft für das Kombinationsfeld fest.

    Anmerkung: Der Designer für gespeicherte Prozeduren erstellt und speichert die folgende SQL-Anweisung:
    CREATE PROCEDURE dbo.spCustomerOrders
      (@CustomerID varchar(5))
      AS SELECT OrderID, CustomerID, OrderDate
      FROM   dbo.Orders
      WHERE  (CustomerID = @CustomerID)
      ORDER BY OrderDate DESC
  6. Legen Sie die Eigenschaft BeimHingehen des Kombinationsfeldes auf die folgende Ereignisprozedur fest:
    Me.SelectOrderCombo.Requery

Methode 4: Verwendung einer SQL Server 2000-Funktion

Diese Methode können Sie nur dann anwenden, wenn SQL Server 2000 (oder eine noch spätere Version) von Access als Datensatzherkunft verwendet wird.
  1. Erstellen Sie im Grafikdesigner eine Funktion.
  2. Wählen Sie die Tabelle "Orders" (Bestellungen) aus und fügen Sie der gespeicherten Prozedur dann die Felder "OrderID", "CustomerID" und "OrderDate" hinzu.
  3. Geben Sie @CustomerID als Kriterium für das Feld "CustomerID" ein und sortieren Sie dann das Feld "OrderDate" in absteigender Reihenfolge.
  4. Speichern Sie die Funktion unter dem Namen "fnCustomerOrders" und schließen Sie sie dann.
  5. Legen Sie die Funktion "fnCustomerOrders" als Datensatzherkunft für das Kombinationsfeld fest.

    Anmerkung: Der Designer für gespeicherte Prozeduren erstellt und speichert die folgende SQL-Anweisung:
    CREATE FUNCTION dbo.fnCustomerOrders
      (@CustomerID varchar(5))
      RETURNS TABLE
      RETURN ( SELECT TOP 100 PERCENT OrderID, CustomerID, OrderDate
      FROM   dbo.Orders
      WHERE  (CustomerID = @CustomerID)
      ORDER BY OrderDate DESC )
  6. Legen Sie die Eigenschaft BeimHingehen des Kombinationsfeldes auf die folgende Ereignisprozedur fest:
    Me.SelectOrderCombo.Requery
Um den Erfolg dieser Methoden zu testen, öffnen Sie das Formular und treffen Sie eine Auswahl aus dem Kombinationsfeld "Select Order" (Bestellung auswählen). Das Ereignis "BeimHingehen" fragt das Kombinationsfeld erneut ab und erstellt dabei automatisch eine Liste aller Bestellungen des aktuellen Kunden. Wenn Sie jetzt eine Bestellung auswählen, wird das Ereignis "BeimKlicken" des Kombinationsfeldes ausgeführt, das Formular "Orders" (Bestellungen) geöffnet und die ausgewählte Bestellung angezeigt.

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Eigenschaften

Artikel-ID: 281870 - Geändert am: Donnerstag, 6. November 2003 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Access 2002 Standard Edition
Keywords: 
kbhowto accesscs KB281870
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com