2015-01-12 3 views
0

У меня есть стол с продуктами и столом с компонентами. Каждый продукт имеет много компонентов, поэтому к ним присоединяется таблица «bundles».Отфильтруйте родителей, на которых были выбраны дети

tblProducts
PID, Описание
1, Альфа
2, Браво
3, Чарли

tblComponents
ИДС, описание, категория
11, Apple, Cat1
12, Банан, Cat2
13, Оранжевый, Cat3

tblBundles
ПИД, ИДС
1, 11
1, 12
1, 13
2, 12

мне нужно создать форму с несколькими ListBoxes (на основе tblComponents .Category), которая позволит мне получить отфильтрованный список продуктов. например выберите Banana и останетесь с Продуктом 1 и 2. Затем выберите Оранжевый цвет и останьтесь с Продуктом 1.

Как я могу получить это?

+0

Вы, кажется, хотите каскадные выпадающие списки (http://stackoverflow.com/questions/927256/is-there-a-simple-way-of-populating-dropdown-in-this-access-database-schema/927588 # 927588) Однако я подозреваю, что подформация может быть лучше (http://stackoverflow.com/questions/12131211/create-form-to-add-records-in-multiple-tables/12132196#12132196). – Fionnuala

ответ

0

в случае, если вы хотите создать каскадные выпадающие списки вы можете действовать таким образом:

cmbComp Отец выпадающий, cmbProd находится на компонент, выбранный ребенок заселена базирование.

в событии AfterUpdate cmbComp вы должны создать строку источника записи, чтобы заполнить вторую комбинацию.

Private Sub cmbComp_AfterUpdate() 
    Dim qdf As QueryDef, strSQL As String 
    Dim i As Integer 
    Dim qryName As String 

    '------------------------------------------------- 
    ' Delete all combobox items 
    '------------------------------------------------- 
    Me.cmbProd.RowSource = "" 
    Me.cmbProd.Requery 

    '------------------------------------------------- 
    ' Define a name for the query 
    '------------------------------------------------- 
    qryName = "qryProducts" 

    '------------------------------------------------- 
    ' Delete query if already existing 
    '------------------------------------------------- 
    For Each qdf In CurrentDb.QueryDefs 
     If qdf.Name = qryName Then 
      CurrentDb.QueryDefs.Delete qryName 
     End If 
    Next qdf 

    '------------------------------------------------- 
    ' Create a query to use as a RowSource 
    '------------------------------------------------- 
    strSQL = "SELECT tbBundles.PID, " & _ 
      "DlookUp(""Product"",""tbProducts"",""PID=""+cstr([tbBundles.PID])) " & _ 
      "AS Product FROM tbBundles WHERE CID = " + CStr(Me.cmbComp) 

    Set qdf = CurrentDb.CreateQueryDef(qryName, strSQL)  ' Create a query (check in the Navigation Pane) 

    Set qdf = Nothing          ' Destroy the object qdf 

    '------------------------------------------------- 
    ' Set up the child combo-box 
    '------------------------------------------------- 
    With Me.cmbProd 
     .ColumnCount = 2 
     .ColumnWidths = "0;2,54"  ' Show Product as item of the list 
     .RowSource = "qryProducts"  ' Set query as rowsource 
     .Requery 
    End With 

End Sub 
+0

Пожалуйста, обратите внимание, что для того, чтобы попробовать этот фрагмент кода, вы должны создать форму с двумя комбо, cmbComp (RowSource настроено с помощью мастера на tbComponents) и cmbProd, без ограничений (он будет заполнен кодом) Форма не требуется DataSource, чтобы попробовать код. Я пробовал на Access 2010 и работал с вами таблицами. пока – Wiz

Смежные вопросы