将文本框设置为等于查询

时间:2015-03-25 18:34:40

标签: sql vba ms-access access-vba ms-access-2010

我在Access Db中有一个查询,它会计算满足两个组合框所定义的特定条件的观察数。查询工作正常,我可以使用子表单获取查询结果以使用组合框显示和更新,但子表单是一种非常难看的方式来表示单个数字。

我想使用文本框来显示查询中的单个数字而不是子报表。我已经尝试将查询的SQL输入到控件源和默认值中,但没有成功。

通过论坛阅读后,我可以编写一个函数,然后将我的控件源设置为等于该函数。

这是我的VBA:

Public Function AdultCount()
Dim rs As Recordset
Set rs=CurrentDb.OpenRecordset("Select Count([name]) as [# Vars] from Masterdb where ((masterdb.year=[forms]![Masterform]![NavigationSubform].[form]![year]) and (masterdb.recipient=[forms]![Masterform]![NavigationSubform].[form]![recipient]) and (masterdb.group="adult"))")

AdultVar=rs!Result

rs.Close

Set rs=Nothing

End Function

我得到“编译错误:预期:列表分隔符或)” 它在我的SQL查询结束时突出显示“成人”。

我不知道为什么这不起作用。有谁知道我为什么会收到这个错误,并告诉我,我是否做了正确的事情来得到我想要的东西?

编辑:

我现在有

Dim strSQL AS String

strSQL = "Select Count([name]) as [# Vars] from Masterdb where [year] = " & Me.NavigationSubform.year.value & " and [recipient] = " & Me.NavigationSubform.recipient.value & " and [group]='adult'"

Set rs=CurrentDb.OpenRecordset(strSQL)

AdultVar=rs![# Vars].Value

rs.Close

Set rs=Nothing

End Function

但是文本框显示为“#Name?”

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

“成人”的双引号引发错误,因为您正在关闭并重新打开字符串而不告诉VB如何处理adult"))")。 SQL无论如何都需要单引号,因此将其更改为“成人”并且错误将消失。

答案 1 :(得分:1)

第二个选项是首先构建你的字符串,如下所示:

Dim strSQL AS String

strSQL = "Select Count([name]) as [# Vars] from Masterdb where [year] = " & Me.NavigationSubform.year.value & " and [recipient] = " & Me.NavigationSubform.recipient.value & " and [group]='adult'"

Set rs=CurrentDb.OpenRecordset(strSQL)

如果您不熟悉使用Me关键字,请进行一些阅读,因为它会缩短您的代码并节省您的时间。