這是一個奇怪的代碼,因為此代碼在周六和昨天運行良好(大約 30 次或更多次運行),但出現“未在此集合中找到專案”。今天總是:
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.Parameters("Forms!frmGpReport1![cmbCouncil]") = Forms!frmGpReport1![cmbCouncil]" 總是能排除錯誤。
它正上方的行(“MsgBox Forms!frmGpReport1![cmbCouncil]”)為我提供了 cmbCouncil 內容的正確值,所以我一生都無法理解為什么 VBA 在設定查詢時找不到它。
任何想法都將不勝感激。
(If,Else 是為了處理這樣一個事實,即我們的一些組織——例如哥倫布騎士團——被組織成地方議會或法院,而大多數不是。我希望能夠相應地報告。)
謝謝。
uj5u.com熱心網友回復:
很多時候,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
uj5u.com熱心網友回復:
顯示msgbox qdf.sql的文本
因為(你相信)資料是正確的
MsgBox Forms!frmGpReport1![cmbCouncil]
...因此問題出在陳述句的另一部分
qdf.Parameters("Forms!frmGpReport1![cmbCouncil]")
通常,這是因為您使用了錯誤的 qdf 或引數。
- 由于(您相信)qdf 自上周以來沒有改變……因此 qdf 的編譯形式已損壞。洗掉并重新創建 qdf。如果這沒有幫助,請將資料庫復制到新資料庫中。
uj5u.com熱心網友回復:
我不太明白古斯塔夫的回答(仍然不明白),但它讓我走上了正確的軌道。
我不想將 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
這幾乎做到了。
叫我快樂的露營者!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/397060.html
