2016-09-28 43 views
0

我试图从一个访问表中读取发送一封电子邮件“Email1”,然后用日期写入相应的记录“Email2”。要找到相应的记录,两个表中的RecID字段将匹配。我的回头率是“语法错误”,突出以下“rs1.Edit其中RS MaxOfForm_Record_Number = rs1.MaxOfForm_Record_Number!”这条线如何从一个表中读取记录并用相应的记录写入另一个表?

Function EmailTest1() 

    Dim rs As Recordset 
    Dim strBody As String 
    Dim strBody2 As String 
    Dim strRecipient As String 
    Dim rs1 As Recordset 
    Set rs1 = CurrentDb.OpenRecordset("Email2") 
    Set rs = CurrentDb.OpenRecordset("Email1") 
    Dim strName As String 
    Dim strProject As String 
    Dim strLastDate As String 
    Dim strNow As String 
    Dim emailcheck As String 

    rs.MoveLast 
    rs.MoveFirst 

    For i = 1 To rs.RecordCount 

     If IsNull(rs!EmailStat) = True Then 
     strNow = Now() 
     strName = rs!Inspected_By 
     strProject = rs!Site_Location 
     strLastDate = rs!LastOfDate_Time_of_Inspection 
     strBody2 = "BLah blah text " 

     rs1.Edit where rs!RecID = rs1.RecID 
     rs1![EmailStat].Value = strNow 
     rs1.Update 

     strBody = "blahblah" 
     strRecipient = rs!Email 
     DoCmd.SendObject , , , strRecipient, , , "Subject", strBody, False, False 


     End If 
     rs.MoveNext 
    Next i 

    Set rs = Nothing 

    End Function 

回答

1

你需要找到的记录错误 - 然后编辑它
你不能这样做在一行像你想

替换:

rs1.Edit where rs!RecID = rs1.RecID 

有了:

rs1.FindFirst "RecID = " & rs!RecID 
rs1.Edit 

编辑 - 添加检查NOMATCH

注意 - 您也应该检查你的rs1.NoMatch尝试使用FindFirst后,
除非你肯定知道,有一个RecID比赛,每记录

+0

谢谢!出于某种原因,我总是得到“操作不支持此对象”,但是当我进入Access时,我可以看到它与RecID匹配。 – Macellaria

+0

什么行给你错误信息? – dbmitch

+0

rs1.FindFirst“RecID =”&rs!RecID – Macellaria

2

我不打扰整个OpenRecordset处理一个简单的更新,我只会这样做:

DoCmd.RunSQL "UPDATE Email2 SET EmailStat=#" & strNow & "# WHERE RecID=" & rs!RecID 

附加说明: RecordCount并不完全值得信赖。我宁愿循环是这样的:

rs.MoveFirst 
Do while Not rs.EOF 
    {Do Stuff} 
    rs. MoveNext 
    Loop 

(这不检查任何记录可言,在所有使用来检查任何记录: rs.EOF=True AND rs.BOF=true rs.MoveFirst之前,否则,你会得到一个错误)

+0

谢谢!根据您的建议更改循环。 – Macellaria

+0

“不打扰整个OpenRecordset处理一个简单的更新”得到我的+1 – onedaywhen

相关问题