Come passare a un record specifico da una selezione casella combinata in Microsoft Access

Moderato: richiede competenze di base di macro, codifica e interoperabilità.

Questo articolo si applica a un file di database di Microsoft Access (con estensione .mdb) oppure a un file di database di Microsoft Access (con estensione .accdb).

Riepilogo

Questo articolo illustra quattro metodi per passare a un record specifico in base alla selezione da una casella combinata. I metodi sono i seguenti:

  • Nell'evento AfterUpdate di una casella combinata eseguire il codice che utilizza il metodo FindFirst.
  • Nell'evento AfterUpdate di una casella combinata chiamare una macro che rieseguire la proprietà Filter di una maschera.
  • Utilizzare una maschera/sottomaschera, con una casella combinata nella maschera principale, e i dati nella sottomaschera, associati alle proprietà LinkMasterFields e LinkChildFields del controllo sottomaschera.
  • Basare il modulo su una query che unisce due tabelle e quindi utilizzare la tecnica AutoLookup per associare una casella combinata al campo che controlla il join.

Questi quattro metodi sono descritti nella sezione "Altre informazioni" di questo articolo e si basano sul database di esempio Northwind.

Ulteriori informazioni

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze.

Attenzione

Se si segue la procedura descritta in questo esempio, si modifica il database di esempio Northwind.mdb. È possibile eseguire il backup del file Northwind.mdb e seguire questa procedura in una copia del database.

Nella tabella seguente vengono confrontate le funzionalità (vantaggi e svantaggi) dei quattro metodi:

Metodo 1 2 3 4
Non richiede codice/macro x
La sottomaschera non è obbligatoria x x
Può scorrere fino ad altri record x x
Non richiede una query x x x x
Può modificare i record x x x x
Apre il modulo in altre modalità x

Nota

Questi metodi possono essere applicati anche alle caselle di testo.

Metodo 1

  1. Creare una tabella denominata Products con il campo ProductID e il campo ProductName.

  2. Utilizzare la Procedura guidata Maschera automatica: Colonna per creare un nuovo modulo basato sulla tabella Products e quindi salvare il modulo come frmComboTest.

    Per eseguire questa operazione in Microsoft Office Access 2003 e versioni precedenti di Access, seguire questa procedura:

    1. Nella finestra Database fare clic su Moduli in Oggetti.
    2. Fare clic su Nuovo sulla barra degli strumenti della finestra database.
    3. Nella finestra di dialogo Nuova maschera fare clic su AutoForm: Columnar, selezionare la tabella Products nell'elenco a discesa e quindi fare clic su OK.
    4. Salvare il modulo come frmComboTest.

    Per eseguire questa operazione in Microsoft Office Access 2007 o versione successiva, seguire questa procedura:

    1. Nella scheda Crea fare clic su Creazione guidata modulo nel gruppo Moduli .
    2. Nella finestra di dialogo Dalla procedura guidata selezionare la tabella Prodotti nell'elenco a discesa.
    3. Selezionare i campi che si desidera visualizzare nel nuovo modulo e quindi fare clic su Avanti.
    4. Selezionare l'opzione Columnar per impostare il layout del modulo e quindi fare clic su Avanti.
    5. Digitare frmComboTest come titolo del modulo e quindi fare clic su Fine.
  3. Usare la Creazione guidata casella combinata per aggiungere una casella combinata non associata. A tal fine, attenersi alla seguente procedura:

    1. Aprire la maschera frmComboTest nella visualizzazione Struttura.
    2. Nella barra degli strumenti verificare che sia selezionata l'opzione Creazioni guidate controllo .

    Nota

    In Access 2007 o in una versione successiva verificare che l'opzione Usa creazioni guidate controllo sia selezionata nel gruppo Controlli della scheda Progettazione .

    1. Creare una casella combinata nel modulo frmComboTest.

    Nota

    In Access 2007 o versione successiva fare clic su Casella combinata nel gruppo Controlli della scheda Progettazione e quindi fare clic sul modulo frmComboTest. Nella finestra di dialogo Scegli generatore fare clic su Creazione guidata casella combinata e quindi fare clic su OK.

    1. Nella finestra di dialogo Creazione guidata casella combinata selezionare l'opzione Trova un record nel modulo in base al valore selezionato nella casella combinata e quindi fare clic su Avanti.
    2. Selezionare i campi ProductID e ProductName e quindi fare clic su Avanti.
    3. Fare clic su Fine.

    La Creazione guidata casella combinata crea una routine evento simile alla seguente:

    Private Sub Combo0_AfterUpdate()
         ' Find the record that matches the control.
         Dim rs As Object
    
     Set rs = Me.Recordset.Clone
         rs.FindFirst "[ProductID] = " & Str(Nz(Me![Combo20], 0))
         If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    End Sub
    
  4. Visualizzare la maschera frmComboTest nella visualizzazione Maschera.

    Si noti che quando si sceglie un nome di prodotto nella casella combinata, si viene spostati nel record per il prodotto selezionato.

Metodo 2

  1. Creare un nuovo modulo basato sulla tabella Products utilizzando la Creazione guidata maschera automatica: Columnar come indicato nel passaggio 2 del metodo 1 e quindi salvare il modulo come frmComboTest2.

  2. Nella pagina Finestra delle proprietà della maschera frmComboTest2 impostare la proprietà Filter nella scheda Dati su [ProductName] = Forms![frmComboTest2]![cboLookup].

  3. Aggiungere una casella combinata non associata denominata cboLookup e quindi impostare le proprietà del controllo come indicato di seguito:

    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Select [ProductName] from Products;
    BoundColumn: 1
    ColumnWidths: 1"
    AfterUpdate: mcrLocateProduct
    
  4. Creare la macro seguente denominata mcrLocateProduct:

    Action
    --------------------------------------
    SetValue
    Requery
    
    mcrLocateProduct Actions
    --------------------------------------
    SetValue
    Item: Forms![frmComboTest2].FilterOn
    Expression: True
    

    Si noti che quando si apre il modulo frmComboTest2 e si seleziona un nome di prodotto dalla casella combinata cboLookup, il filtro viene impostato su tale valore.

Metodo 3

  1. Creare un nuovo modulo basato sulla tabella Products utilizzando la Creazione guidata Maschera automatica: Columnar come indicato nel passaggio 2 del metodo 1 e quindi salvare il modulo come frmSub.

  2. Nella pagina Finestra delle proprietà della maschera frmSub impostare la proprietà Visualizzazione predefinita nella scheda Formato su Maschera singola.

  3. Creare un nuovo modulo (non basato su alcuna tabella o query) e salvarlo come frmMain. Aggiungere quindi una casella combinata e impostarne le proprietà come indicato di seguito:

    Combo Box
    ----------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Products
    ColumnCount: 4
    ColumnWidths: 0";2"
    BoundColumn: 1
    
  4. Inserire un controllo Sottomaschera della maschera frmSub.

    • Passare a Progettazione>sottomaschera/sottoreport e quindi annullare la Creazione guidata sottomaschera.
    • Trascinare e rilasciare frmSub dal riquadro di spostamento nel modulo frmMain.
  5. Impostare le proprietà del controllo sottomaschera come indicato di seguito:

    Subform
    ----------------------------
    LinkChildFields: [ProductID]
    LinkMasterFields: cboLookup
    

    Modificando il valore nel controllo cboLookup, Access garantisce che i record nella sottomaschera corrispondano alla casella combinata.

    Il modulo Orders nel database di esempio Northwind illustra questo metodo. La sottomaschera Dettagli ordine è correlata alle proprietà LinkMasterFields e LinkChildFields .

Metodo 4: utilizzare l'azione di macro OpenForm con la clausola WHERE

  1. Creare un nuovo modulo basato sulla tabella Products usando la Procedura guidata Maschera automatica: Columnar come indicato nel passaggio 2 del metodo 1 e quindi salvare il modulo come frmComboTest5.

  2. Aggiungere una casella combinata non associata denominata cboLookup e quindi impostare le proprietà del controllo come indicato di seguito:

    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: SELECT [ProductID], [ProductName] FROM Products ORDER BY [ProductName];
    BoundColumn: 1
    ColumnCount: 2
    ColumnWidths: 0";1"
    
  3. In Generatore macro creare una nuova macro incorporata nell'evento AfterUpdate per la casella combinata cboLookup.

  4. Nell'elenco a discesa Aggiungi nuova azione selezionare OpenForm e quindi impostare le proprietà seguenti:

    Form Name:   frmComboTest5
    View:        Form
    Filter Name: <leave as empty>
    Where Condition: [ID] = [Forms]![frmComboTest5]![cboLookup].value
    Data Mode: <optional>
    Window Mode: <optional>
    
  5. Salvare e chiudere la macro.

  6. Salvare ed eseguire il modulo.

Dopo aver modificato il valore della casella combinata, il modulo verrà chiuso e aperto nuovamente con un filtro applicato.