这是一个奇怪的问题,因为这段代码在周六和昨天运行得很好(大约运行了三十次或更多次(,但最终以"在此集合中找不到项"今天总是这样:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qdf As DAO.QueryDef
Set db = CurrentDb
Set qdf = db.QueryDefs("quyPartRpt")
qdf.Sql = Replace(qdf.Sql, "plugtable", txtVigilTable)
If optGp1 = 1 Then
qdf.Sql = Replace(qdf.Sql, "WHERE v.[fldUserName] = v.[fld.UserName]", "WHERE v.[fldChurch/Parish] = Forms!frmGpReport1!cmbChurch")
qdf.Parameters("Forms!frmGpReport1![cmbChurch]") = Forms!frmGpReport1![cmbChurch]
Else
If IsNull(Forms!frmGpReport1![cmbCouncil]) Then
qdf.Sql = Replace(qdf.Sql, "WHERE v.[fldUserName] = v.[fld.UserName]", "WHERE v.[fldGroup] = Forms!frmGpReport1![cmbGroup]")
qdf.Parameters("Forms!frmGpReport1![cmbGroup]") = Forms!frmGpReport1![cmbGroup]
Else
qdf.Sql = Replace(qdf.Sql, "WHERE v.[fldUserName] = v.[fld.UserName]", "WHERE v.[fldGroup] = Forms!frmGpReport1![cmbGroup] AND v.[fldCouncil/Court] = Forms!frmGpReport1![cmbCouncil]")
qdf.Parameters("Forms!frmGpReport1![cmbGroup]") = Forms!frmGpReport1![cmbGroup]
MsgBox Forms!frmGpReport1![cmbCouncil]
qdf.Parameters("Forms!frmGpReport1![cmbCouncil]") = Forms!frmGpReport1![cmbCouncil]
End If
End If
MsgBox qdf.Sql
Set rs = qdf.OpenRecordset
(由于其余部分无关紧要,因此被截断。(
线";qdf。参数("Forms!frmGpReport1![cmbCouncil]"(=Forms!frmGpReport1![cmbCuncil]";是一个总是排除错误的人。
它正上方的行("MsgBox Forms!frmGpReport1![cmbConscil]"(为我提供了cmbConscil内容的正确值,因此我终生无法理解VBA在设置查询时找不到它的原因。
任何想法都将不胜感激。
(《如果,否则》是为了处理这样一个事实,即我们的一些组织——例如哥伦布骑士团——被组织成地方议会或法院,而大多数不是。我希望能够做出相应的报告。(
谢谢。
Access SQL通常不喜欢匿名参数,并会感到困惑。因此,您可能需要更明确地构建这样的SQL,在其中声明参数及其数据类型:
Parameters
cmbChurch Text,
cmbGroup Text,
cmbCouncil Text;
Select
...
From
PlugTable
Where
v.[fldChurch/Parish] = cmbChurch
And
v.[fldGroup] = cmbGroup
And
v.[fldCouncil/Court] = cmbCouncil
然后:
qdf.Parameters("cmbChurch").Value = Forms!frmGpReport1![cmbChurch].Value
qdf.Parameters("cmbGroup").Value = Forms!frmGpReport1![cmbGroup].Value
qdf.Parameters("cmbCouncil").Value = Forms!frmGpReport1![cmbCouncil].Value
-
显示消息框qdf.sql 的文本
-
既然(你相信(数据是正确的
MsgBox Forms!frmGpReport1![cmbCouncil]
。。。因此问题出现在报表的另一部分
qdf.Parameters("Forms!frmGpReport1![cmbCouncil]")
通常,这是因为您使用了错误的qdf或参数。
- 由于(你相信(qdf自上周以来没有改变。。。因此,qdf的编译形式已损坏。删除并重新创建qdf。如果没有帮助,请将数据库复制到一个新的数据库中
我不太理解古斯塔夫的回答(仍然不理解(,但这让我走上了正轨。
我不想把cmbChurch等调暗为文本,因为它们已经是格式化为文本的组合框;但我确实想到,创建变量,将它们设置为等于组合框,然后将它们输入到查询中可能会更方便,因此:
Dim vChurch As String
Dim vGroup As String
Dim vCouncil As String
. . . . .
vChurch = IIf((Not IsNull(Me.cmbChurch)), Me.cmbChurch, "")
vGroup = IIf((Not IsNull(Me.cmbGroup)), Me.cmbGroup, "")
vCouncil = IIf((Not IsNull(Me.cmbCouncil)), Me.cmbCouncil, "")
MsgBox "vChurch = " & vChurch & vbCrLf & "vGroup = " & vGroup & vbCrLf & "vCouncil = " & vCouncil
If optGp1 = 1 Then
qdf.Sql = Replace(qdf.Sql, "WHERE v.[fldUserName] = v.[fld.UserName]", "WHERE v.[fldChurch/Parish] = Forms!frmGpReport1![cmbChurch]")
MsgBox qdf.Sql
qdf.Parameters("Forms!frmGpReport1![cmbChurch]") = vChurch
Else
If (vCouncil = "") Then
qdf.Sql = Replace(qdf.Sql, "WHERE v.[fldUserName] = v.[fld.UserName]", "WHERE v.[fldGroup] = Forms!frmGpReport1![cmbGroup]")
MsgBox qdf.Sql
qdf.Parameters("Forms!frmGpReport1![cmbGroup]") = vGroup
Else
qdf.Sql = Replace(qdf.Sql, "WHERE v.[fldUserName] = v.[fld.UserName]", "WHERE v.[fldGroup] = Forms!frmGpReport1![cmbGroup] AND v.[fldCouncil/Court] = Forms!frmGpReport1![cmbCouncil]")
MsgBox qdf.Sql
qdf.Parameters("Forms!frmGpReport1![cmbGroup]") = vGroup
qdf.Parameters("Forms!frmGpReport1![cmbCouncil]") = vCouncil
End If
End If
这几乎做到了。
叫我快乐的露营者!