访问具有多个值的文本框进行查询
Posted
技术标签:
【中文标题】访问具有多个值的文本框进行查询【英文标题】:Access textbox with multiple values to query 【发布时间】:2016-10-13 13:40:03 【问题描述】:我有一个 Access 数据库,其中有一个带有文本框(名为 c1)和一个按钮的表单。当我单击该按钮时,它会打开一个数据表表单,其中包含按文本框值过滤的信息。
按钮 vba 如下所示:
c1.Value = Replace(c1.Value, ",", " Or ")
DoCmd.OpenForm ("dsForm")
数据表后面的查询在设计视图中看起来像这样:
Field: Name1 | Name2
Criteria: | Like [Forms]![Menu]![c1].[value]
这样我以后可以将此查询的结果导出到 excel。
所以我的问题是我想在文本框中输入值并用逗号分隔它们,稍后将通过 vba 将它们转换为 Or。为什么我使用 1 个文本框而不是多个文本框来执行此操作,是因为我可以有许多要搜索的值。
现在,如果我在文本框中输入一个值,它就可以工作,但是当我输入 2 个值时,它就不起作用了。我很确定查询将整个语句作为字符串,例如,如果我输入 110,220,它应该像“110”或“220”,但在查询中它会像“110 或 220”。
我尝试将字段设置为字符串或数字。我将如何操作来自 vba 的查询的条件?
【问题讨论】:
【参考方案1】:我建议使用 IN 语句而不是 OR 编写 SQL 字符串,并使用 OpenArgs 事件将数据从主表单传递到数据表表单。
主窗体按钮代码
Dim sql as String
sql = "Select * From [table name] Where Name2 IN (" & c1 & ")"
DoCmd.OpenForm "dsForm", acFormDS, , , , , sql
数据表表单 (dsForm) 代码 -- 使用 Form_Load 事件。
Private Sub Form_Load()
Me.RecordSource = Me.OpenArgs
End Sub
IN 语句允许您使用逗号。 OpenArgs 事件允许您将值从一种形式传递到另一种形式。
【讨论】:
为什么你不能只使用sql = "WHERE Name2 in (" & c1 & ")"
然后DoCmd.openform "dsform", acformDS, , sql
并将SQL 语句放在Where 语句的位置。那么就不需要传递任何openargs或者使用其他形式的recordsource语句
@geeFlo 你是对的,这更适合这种情况。虽然正确的措辞是在没有“WHERE”保留字的情况下完成的。 'sql = Name2 in (" & c1 & ")" '【参考方案2】:
实际上我的第一个方法很糟糕,将值读入这样的数组:
Sub y()
a = "a,b,c,d"
'Split into 1d Array
b = Split(a, ",", , vbTextCompare)
For c = 0 To UBound(b)
Debug.Print b(c)
Next c
End Sub
您可以像在 debug.print 循环中一样循环遍历数组并分别使用每个值。
【讨论】:
以上是关于访问具有多个值的文本框进行查询的主要内容,如果未能解决你的问题,请参考以下文章