使用参数运行查询并在ListBox MS Access 2013中显示

时间:2014-10-17 10:23:56

标签: access-vba

我在Access 2013中创建了一个带有两个参数的查询

PARAMETERS blah TYPE, blah TYPE;
SELECT * FROM blah WHERE blah blah;

我想运行该查询并在列表框中显示结果。

通常我会喜欢

Me.MyListBox.RowSource =“myQuery”

但是当我这样做时,会弹出一个框,告诉我输入第一个参数。如何以编程方式指定参数?

我的第二种方法就像是

With CurrentDb.QueryDefs("myQuery")
    .Parameters("param1") = 1
    .Parameters("param2") = 2
    Me.MyListBox.RowSource = .OpenRecordset()
End With

这给了我类型不匹配?

我该怎么做?

编辑:为了清楚起见,我知道我可以连接字符串来构建我想要的查询,例如:

Me.MyListBox.RowSource =“SELECT * FROM table WHERE abc Like'”&某些价值观“'”

但这正是我想要避免的,因为它使代码难以维护和阅读。

2 个答案:

答案 0 :(得分:2)

好的,我想我找到了我要找的东西。

Private Sub SomeButton_Click()
    With CurrentDb.QueryDefs("myQuery")
        .Parameters("firstParameter") = 2
        Set Me.MyListBox.Recordset = .OpenRecordset
        .Close
    End With
End Sub

如果你想改为运行INSERT / UPDATE / DELETE,我认为你可以做同样的事情,但不要使用OpenRecordset,而是调用Execute。

答案 1 :(得分:1)

根据列表框中的过滤条件是MultiSelect还是单个条目,以下内容将起作用。在进行选择后,您需要重新查询ListBox。

Public Function sListBox() As String
    If Not IsNull(Forms![frmListbox]![lstDate]) Then
        sListBox = Forms![frmListbox]![lstDate]
    End If
End Function

您的查询可能看起来像(直接引用ComboBox和ListBox的函数:

SELECT CUSTOMER.ProductNumber, CUSTOMER.LastOrder
FROM CUSTOMER
WHERE (((CUSTOMER.ProductNumber)=Forms!frmListbox!cboCustomer) 
And ((CUSTOMER.LastOrder)=sListBox()));