设置 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) 返回“无效的过程调用”的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致发送 TCP/IP 重置 (RST) 标志?

TCP通信 - RST的产生

心电信号基于matlab逻辑算法RST波检测含Matlab源码 2386期

TCP关闭连接 - 不容易

nodemcu恢复出厂设置

如何将 rst.FindFirst 与 rst.NoMatch 一起使用?