访问 2010 VBA 运行时错误 '3265' 在此集合中找不到项



这是一个奇怪的问题,因为这段代码在周六和昨天运行得很好(大约运行了三十次或更多次(,但最终以"在此集合中找不到项"今天总是这样:

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
  1. 显示消息框qdf.sql 的文本

  2. 既然(你相信(数据是正确的

    MsgBox Forms!frmGpReport1![cmbCouncil]
    

。。。因此问题出现在报表的另一部分

qdf.Parameters("Forms!frmGpReport1![cmbCouncil]")

通常,这是因为您使用了错误的qdf或参数。

  1. 由于(你相信(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

这几乎做到了。

叫我快乐的露营者!

最新更新