如何解决Ms-Access如何在表格内使用带有参数的查询
| 我有一个SQL查询,每次打开它都会弹出一个问题(类似警报)... 对于该问题中插入的每个值,您都会得到不同的结果。 我希望能够通过组合框在我的表单中使用该查询... 我不知道如何从表单中使用参数执行查询...。 我使用VBA没问题,只是告诉我如何使用参数调用查询 谢谢, 手指人解决方法
我通常会按照以下原则使用过滤表单:
1)我首先创建一个查询,其中包含要显示的所有字段以及要过滤的所有字段。它可以使用多个表。除非存在无论如何始终需要应用的条件,否则我不会在此查询中设置任何条件(WHERE子句)。
2)接下来,我将基于此查询创建一个数据表表单,然后保存该表单,并为其指定一个名称,该名称指示该表单是子表单。
3)接下来,我创建一个未绑定的主窗体,并添加未绑定的控件,例如文本框,组合,列表框,复选框等,这些控件将用于过滤不同的字段。一个控件可能允许用户搜索多个字段,具体取决于您在VBA中编写过滤例程的方式。
4)现在是时候在主窗体上编写代码以使所有这些工作了。基本上,代码需要检查是否在任何控件中都有值,如果有,它会创建一个WHERE子句(不带WHERE关键字),并在最后设置子窗体的filter属性并打开子窗体的FilterOn属性设置为TRUE。
这是一些示例代码。这取自我为演示过滤而创建的示例数据库(请参见下文)。本示例不使用模糊搜索(星号),主窗体上的每个控件仅过滤子窗体上的一个字段。
Private Sub cmdFilter_Click()
\'You can also call the FilterSubForm function on a control\'s AfterUpdate event.
Call FilterSubform
End Sub
Private Sub FilterSubform()
Dim strFilter As String
\'Note: We have to wrap field names in brackets if they contain spaces or
\'special characters. These fields are in Northwind Traders 2007 from Microsoft
\'I would never consider naming my fields with spaces or special characters
\'in them.
\'Company
If Nz(Me.txtCompany,\"\") <> \"\" Then
strFilter = strFilter & \"Company = \'\" & PQ(Me.txtCompany) & \"\' And \"
End If
\'First Name
If Nz(Me.txtFirstName,\"\") <> \"\" Then
strFilter = strFilter & \"[First Name] = \'\" & PQ(Me.txtFirstName) & \"\' AND \"
End If
\'Last Name
If Nz(Me.txtLastName,\"\") <> \"\" Then
strFilter = strFilter & \"[Last Name] = \'\" & PQ(Me.txtLastName) & \"\' AND \"
End If
\'Business Phone
If Nz(Me.txtBusinessPhone,\"\") <> \"\" Then
strFilter = strFilter & \"[Business Phone] = \'\" & PQ(Me.txtBusinessPhone) & \"\' AND \"
End If
\'City
If Nz(Me.cboCity,\"\") <> \"\" Then
strFilter = strFilter & \"City = \'\" & PQ(Me.cboCity) & \"\' AND \"
End If
\'State/Province
If Nz(Me.cboStateProvince,\"\") <> \"\" Then
strFilter = strFilter & \"[State/Province] = \'\" & PQ(Me.cboStateProvince) & \"\' AND \"
End If
\'Order Date
If Nz(Me.txtOrderDate,\"\") <> \"\" Then
If IsDate(Me.txtOrderDate) = True Then
strFilter = strFilter & \"[Order Date] = #\" & Me.txtOrderDate & \"# AND \"
End If
End If
\'Ship Name
If Nz(Me.txtShipName,\"\") <> \"\" Then
strFilter = strFilter & \"[Ship Name] = \'\" & PQ(Me.txtShipName) & \"\' AND \"
End If
\'Ship City
If Nz(Me.txtShipCity,\"\") <> \"\" Then
strFilter = strFilter & \"[Ship City] = \'\" & PQ(Me.txtShipCity) & \"\' AND \"
End If
\'Ship State/Province
If Nz(Me.cboShipStateProvince,\"\") <> \"\" Then
strFilter = strFilter & \"[Ship State/Province] = \'\" & PQ(Me.cboShipStateProvince) & \"\' AND \"
End If
\'Product Code
If Nz(Me.cboProductCode,\"\") <> \"\" Then
strFilter = strFilter & \"[Product Code] = \'\" & PQ(Me.cboProductCode) & \"\' AND \"
End If
\'Quantity
If Nz(Me.txtQuantity,\"\") <> \"\" Then
If IsNumeric(Me.txtQuantity) = True Then
strFilter = strFilter & \"Quantity = \" & Me.txtQuantity & \" AND \"
End If
End If
If Right(strFilter,5) = \" AND \" Then strFilter = Left(strFilter,Len(strFilter) - 5)
If strFilter <> \"\" Then
Me.subformOrderSearch.Form.Filter = strFilter
Me.subformOrderSearch.Form.FilterOn = True
Else
\'Clear the filter
Me.subformOrderSearch.Form.Filter = \"\"
Me.subformOrderSearch.Form.FilterOn = False
End If
End Sub
Private Function PQ(s As String) As String
\'This function is used to \"pad quotes\" for SQL
PQ = Replace(s,\"\'\",\"\'\'\")
End Function
我整理了一个示例数据库,其中包含几个不同的示例,所有示例均基于我在此处发布的内容。您可以在这里下载此数据库:
http://www.utteraccess.com/forum/Search-filtering-Examples-t1968063.html
, 经过一番搜索,我发现了这一点:
http://www.techrepublic.com/blog/msoffice/run-a-parameter-query-within-an-access-form/701
这不是我想要的,但这是一个很好的解决方案...
我将等待,如果没有人能得到更好的答案,我会接受我自己的(尽管我讨厌这样做)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。