Access 2007 VBA VBA SQL Select Error „Elementul nu a fost găsit în această colecție” (Programare, Sql, Vba, Ms Access 2007)

Mike a intrebat.
a intrebat.

Revenind după ce am reparat erorile și acum una nouă. Am creat o declarație SQL folosind VBA în Access 2007 și primesc eroarea „Item not found in this collection” Câmpurile există în tabele și sunt scrise corect. Am copiat chiar și declarația SQL într-o interogare și a funcționat. Presupun că eroarea este la această parte a codului

Dim strCMCID As Long  ' (it's a Key field AutoNumber) 
strCMCID = Me!CMCID_Txt 

și

"WHERE Commitments_Tbl.CMCID = " & strCMCID & "" 

Codul complet postat mai jos. Aceasta este prima dată când pun o declarație SQL folosind VBA. Ceea ce încerc să fac este să obțin declarația SQL pentru a extrage două adrese de e-mail dintr-o anumită înregistrare din formularul curent.

Public Sub SendConfirm()
On Error GoTo Err_SendConfirm_Click

Dim Borrower As String, LOEmail As String, ProcEmail As String, ClsEmail As String, Caution As String, LNumber As Long, TheFile As String, TheName As String

'SQL Statement to get Processor and Closer email
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
Dim strCMCID As Long  'AutoNumber
Dim strMWS As String
Dim strProcEM As String
Dim StrClsEM As String

strCMCID = Me!CMCID_Txt  'AutoNumber
strSQL = "SELECT Commitments_Tbl.CMCID, Status_Tbl.MWStatus, DBUsers_Tbl.EMail, DBUsers_Tbl_1.EMail " & _
"FROM ((Commitments_Tbl LEFT JOIN Status_Tbl ON Commitments_Tbl.LoanNumber = Status_Tbl.LoanNumber) LEFT JOIN DBUsers_Tbl AS DBUsers_Tbl_1 ON Status_Tbl.Processor = DBUsers_Tbl_1.MWName) LEFT JOIN DBUsers_Tbl ON Status_Tbl.Closer = DBUsers_Tbl.MWName " & _
"WHERE Commitments_Tbl.CMCID = " & strCMCID & ""

Set dbs = CurrentDb
Set rst = CurrentDb.OpenRecordset(strSQL)
strMWS = rst!MWStatus
strProcEM = Nz(rst!DBUsers_Tbl.EMail, "[email protected]")
StrClsEM = Nz(rst!DBUsers_Tbl_1.EMail, "[email protected]")

'Message Box
Dim Msg, Style, Title, Response

LOEmail = Me!OrigID_Cbo.Column(3)
Borrower = Me!BorrNameL_Txt
LNumber = Nz(Me!LoanNumber_Txt, 0)

Msg = "Do you want to send an e-mail to Set_up?"
Style = vbYesNo
Title = "Cancel Set-Up E-Mail"
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
    GoTo line3
Else
    GoTo line4
End If

line3:
TheName = "" & Borrower & " " & LNumber & ""
TheFile = "P:mortgageprodcentersLOAN ITEMS (SW)_RateLocks_and_Changes" & TheName & ".rtf"

DoCmd.OutputTo acOutputReport, "Confirmation_Email2", acFormatRTF, TheFile, False

    If Nz(Me!InvestorID_Cbo, "Blank") = "Blank" Then
      DoCmd.SendObject , , , "[email protected]", , , "New Lock: " & Borrower & ": " & LNumber, "A rate lock confirmation has been saved down to the server at P:mortgageprodcentersLOAN ITEMS (SW)_RateLocks_and_Changes as a word document with the same name and loan number as that is the subject line of this email. Please upload it into the GDR.", -1
    Else
      DoCmd.SendObject , , , "[email protected]", , , "Term Change" & ": " & Borrower & ": " & LNumber, "A rate lock confirmation has been saved down to the server at P:mortgageprodcentersLOAN ITEMS (SW)_RateLocks_and_Changes as a word document with the same name and loan number as that is the subject line of this email. Please upload it into the GDR.", True
    End If

line4:
    ClsEmail = Nz(StrClsEM, "[email protected]")
    ProcEmail = Nz(strProcEM, "[email protected]")
If Me!RateExpDate_Txt <= Date + 8 Then
    Caution = "STOP Terms Finalized:"
ElseIf strMWS = "Closing" And Me!RateExpDate_Txt >= Date + 8 Then
    Caution = "STOP:"
Else
    Caution = ""
End If
If Me!InvestorID_Cbo = "" Then
    DoCmd.SendObject acSendReport, "Confirmation_Email", "SnapshotFormat(*.snp)", LOEmail, ProcEmail & ";" & ClsEmail, , Caution & "New Lock: " & Borrower & ": " & LNumber, , True
Else
    DoCmd.SendObject acSendReport, "Confirmation_Email", "SnapshotFormat(*.snp)", LOEmail, ProcEmail & ";" & ClsEmail, , Caution & "  " & "Term Change" & ": " & Borrower & ": " & LNumber, , True
End If
rst.Close
Set rst = Nothing
Set dbs = Nothing

Exit_SendConfirm_Click:
    Exit Sub

Err_SendConfirm_Click:
    MsgBox Err.Description
    Resume Exit_SendConfirm_Click

End Sub

1 răspunsuri
Gord Thompson

Dacă creăm o interogare în Access care extrage două câmpuri cu același nume din două tabele diferite, atunci Access va numi coloanele rezultate Table1.Field și Table2.Field pentru a le dezambiguiza. Atunci când ne referim la aceste câmpuri în Recordset folosind „bang (!) notation”, trebuie să puneți paranteze pătrate în jurul întregului nume al câmpului. În cazul dumneavoastră, de exemplu, ar trebui să utilizați

rst![DBUsers_Tbl.EMail]

în loc de

rst!DBUsers_Tbl.EMail