下面的代码调用passthru查询(PTQ),并应该显示一条消息,指示受影响的记录数:
With CurrentDb
.Execute "ArticleClientTmpUpdate"
MsgBox .RecordsAffected & " records updated"
End WithPTQ做了一个简单的合并:
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会更好吗?
发布于 2016-09-26 15:46:40
这是故意的。一个带有ReturnsRecords = False的传递查询被发送到服务器,从Access的角度来看就是这样。
.RecordsAffected从不设置为传递查询.
您必须创建一个执行SQL的存储过程,然后返回记录数。
来自https://bytes.com/topic/access/answers/204949-passthrough-queries-recordsaffected
CREATE PROCEDURE ...
SET NOCOUNT ON;
<your Update query here>
SELECT @@ROWCOUNT AS myROWCOUNT;https://stackoverflow.com/questions/39705203
复制相似问题