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

时间:2016-10-13 13:40:03

标签: sql vba ms-access access-vba

我有一个Access数据库,我有一个带有文本框(名为c1)和按钮的表单。当我单击按钮时,它会打开一个数据表表单,其中包含按文本框值过滤的信息。

按钮vba如下所示:

c1.Value = Replace(c1.Value, ",", " Or ")
DoCmd.OpenForm ("dsForm")

数据表背后的查询在设计视图中看起来像这样:

Field:      Name1  |  Name2
Criteria:          |  Like [Forms]![Menu]![c1].[value]

这样我以后可以将此查询的结果导出为ex​​cel。

所以我的问题是我想在文本框中输入值并用逗号分隔它们,后来将变成一个或者通过vba。为什么我用1个文本框而不是多个文本框这样做,是因为我可以有很多我想要搜索的值。

现在它可以在文本框中输入一个值,但是当我输入2个值时,它不起作用。我很确定查询将整个语句作为一个字符串,例如,如果我输入110,220它应该是Like" 110"或" 220",但在查询上它会像" 110或220"。

我已尝试将字段设置为字符串或数字。我如何操纵来自vba的查询条件?

2 个答案:

答案 0 :(得分: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事件允许您将值从一个表单传递到另一个表单。

答案 1 :(得分:0)

实际上我的第一种方法很糟糕,将值读入这样的数组:

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

您可以像调试.print循环一样遍历数组,并分别使用每个值。