访问具有多个值的文本框进行查询

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 循环中一样循环遍历数组并分别使用每个值。

【讨论】:

以上是关于访问具有多个值的文本框进行查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Access VBA 将具有默认值的未绑定文本框的值设置为空字符串

如何将多个数据库值返回到文本框?

ms 访问 - 基于文本框值的复选框

自动更新文本框

在报表中显示访问查询结果

javascript 具有多个文本框和多个按钮的Web应用程序