我在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?”
有什么想法吗?
答案 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关键字,请进行一些阅读,因为它会缩短您的代码并节省您的时间。