DAO RecordsAffected 在 passthru 合并后不返回正确的值

Posted

技术标签:

【中文标题】DAO RecordsAffected 在 passthru 合并后不返回正确的值【英文标题】:DAO RecordsAffected does not return the right value after passthru merge 【发布时间】:2017-02-03 22:29:03 【问题描述】:

以下代码调用 passthru 查询 (PTQ) 并应显示一条消息,指示受影响的记录数:

With CurrentDb
    .Execute "ArticleClientTmpUpdate"
    MsgBox .RecordsAffected & " records updated"
End With

PTQ 做了一个简单的合并:

merge into dbo.ArticlesClients ac
using (select * from dbo.ArticlesClientsTmp) act on ac.IdArticle = act.IdArticle and ac.IdClient = act.IdClient 
when matched then 
    update  SET ac.IdArticle = act.[idArticle], 
                ac.IdClient = act.[idclient], 
                ac.RefClient = act.[refClient], 
                ac.Commentaire = act.[commentaire], 
                ac.ModDate = getdate()
when not matched then 
    insert (idArticle, idClient, RefCLient, Commentaire)
    values (act.idArticle, act.idClient, act.RefCLient, act.Commentaire);

在清空目标表后从 SSMS 执行时,我可以看到 9200 行受到影响(例如创建)。 使用上述 VBA 执行相同的合并时,它显示“导入了 0 条记录”,但会执行该作业并创建 9200 条记录。 有什么解释吗?有解决该问题的方法吗?使用 ADO connection 而不是 DAO CurrentDb 会更好吗?

【问题讨论】:

【参考方案1】:

这是设计使然。带有ReturnsRecords = False 的 Pass-Through 查询被发送到服务器,从 Access 的角度来看就是这样。

.RecordsAffected 永远不会为 Pass-Through 查询设置。

您必须创建一个存储过程来执行您的 SQL,然后返回记录数。

来自https://bytes.com/topic/access/answers/204949-passthrough-queries-recordsaffected

CREATE PROCEDURE ...

SET NOCOUNT ON;

<your Update query here>

SELECT @@ROWCOUNT AS myROWCOUNT;

【讨论】:

以上是关于DAO RecordsAffected 在 passthru 合并后不返回正确的值的主要内容,如果未能解决你的问题,请参考以下文章

JclUnicode.pas(8000行),JclAnsiStrings.pas(4000行),JclWideStrings.pas(2300行),JclStrings.pas(5400行),JclC

使用 c++ builder 2009 reinit.pas 进行本地化

如何用delphi打开pas文件

商店购物 (shopping.c/cpp/pas)

Qt函数调用问题

pas-s-rseInt() 的问题[关闭]