我在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'”&某些价值观“'”
但这正是我想要避免的,因为它使代码难以维护和阅读。
答案 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()));