设置 rst = CurrentDb.OpenRecordset(strSQL) 返回“无效的过程调用”
Posted
技术标签:
【中文标题】设置 rst = CurrentDb.OpenRecordset(strSQL) 返回“无效的过程调用”【英文标题】:Set rst = CurrentDb.OpenRecordset(strSQL) returning an "invalid procedure call" 【发布时间】:2020-01-02 20:51:48 【问题描述】:我有一个用于通过电子邮件发送发票的 Access 数据库。它已经工作了几年。我在 Set rst = CurrentDb.OpenRecordset(strSQL)
上收到无效的过程调用。
看来 SQL 是正确的。自去年 3 月以来,我没有对数据库进行任何更改。
private Sub Email_AP_Click()
Dim strSQL As String
Dim rst As DAO.Recordset
Dim strSubject As String
Dim strtext As String
strSQL = "SELECT DISTINCT Client_Table_AP.EmailAddress, Client_Table_AP.CCEmailAddress, Client_Table_AP.CombineCode, Client_Table_AP.closed, Qry_Client_Table_AP.Client_ID, Qry_Client_Table_AP.Invoice_Total, Qry_Client_Table_AP.CombineName, Qry_Client_Table_AP.FirstName, Qry_Client_Table_AP.TrueMonthText, Qry_Client_Table_AP.TrueYear " & _
"FROM Client_Table_AP INNER JOIN Qry_Client_Table_AP ON Client_Table_AP.CombineCode = Qry_Client_Table_AP.CombineCode " & _
"WHERE Len(Client_Table_AP.EmailAddress & '') >0 and Qry_Client_Table_AP.Invoice_Total <>0"
Set rst = CurrentDb.OpenRecordset(strSQL)
While rst.EOF = False
strSubject = "SLIM CD invoice for the Advantage Program: " & rst!CombineName & " for " & rst!TrueMonthText & " " & rst!TrueYear
strtext = "Dear " & rst!FirstName & "," & Chr(13) & Chr(13) & "Please find your Slim CD statement for " & rst!CombineName & " attached. The amount due will be debited automatically on the 10th of this month." & Chr(13) & Chr(13) & "Let us know if you have any questions." & Chr(13) & Chr(13) & "Thank you," & Chr(13) & Chr(13) & "Ascent Processing Inc." & Chr(13) & "888 721 9301 office" & Chr(13) & "303 827 2467 fax" & Chr(13) & "http://www.ascentprocessing.com"
strEMail = rst!EmailAddress
strccemail = rst!CCEmailAddress
DoCmd.OpenReport "Rpt_Invoice_AP", acViewPreview, , "[CombineCode]= " & rst!CombineCode, acHidden
DoCmd.SendObject acReport, "Rpt_Invoice_AP", acFormatPDF, strEMail, strccemail, "slimbilling@ascentprocessing.com", strSubject, strtext, True
DoCmd.Close acReport, "Rpt_Invoice_AP"
rst.MoveNext
Wend
Set rst = Nothing
End Sub
【问题讨论】:
如果代码没有改变,那么先反编译+重新编译(见this Q&A)。如果这不起作用,我建议按照this answer 作为第 2 步。 目标中的某些内容发生了变化?慢慢建立起来。验证每个表是否存在 client_table_ap qry_client_table_ap(这些名称看起来很相似)。验证每个列名的准确拼写。仅选择表 1 或表 2。 Select/From/Join/On without Where. 【参考方案1】:插入这一行:
Debug.Print strSQL
在这一行之前:
Set rst = CurrentDb.OpenRecordset(strSQL)
然后运行代码,从即时窗口复制输出,并将其粘贴到新查询中(在 SQL 视图中)。
现在,运行查询并研究它将显示的任何错误。如果没有显示错误,请继续执行上面 Erik 发布的建议。
【讨论】:
以上是关于设置 rst = CurrentDb.OpenRecordset(strSQL) 返回“无效的过程调用”的主要内容,如果未能解决你的问题,请参考以下文章