首页 > 解决方案 > 通过 VBA 中的操作查询获取受影响记录的数量

问题描述

我想知道在 VBA 运行时将特定数量的新数据行插入到表中时是否可以选择 MS Access 正在使用的变量。

MS 访问通知的屏幕截图(德语):

MS 访问通知的屏幕截图(德语)

在这种情况下,MS Access 在此处通知我,在运行 VBA 脚本的过程中,正在将 2327 个新数据行添加到表中。我不是程序员,但我觉得这个变量必须存储在某个地方(至少是临时的)。

有谁知道如何从窗口中选择/访问这个数字,然后将其存储到 VBA 整数中以供将来进一步使用?

更新:

基本上,我有一个必须每天通过导入文件更新的主数据库。

第一步检查已经存在的数据集,因此只能通过 UPDATE-Query 更新。

UPDATE ReiseMaster
INNER JOIN Update_Import
ON(ReiseMaster.Col1 = Update_Import.Col1)
   SET ReiseMaster.Col2  = Update_Import.Col2,
       ReiseMaster.Col3  = Update_Import.Col3;

然后,在第二步中,将在主数据库中不存在的新数据集插入其中包含它们包含的所有信息。这是负责在 VBA 过程中追加新数据行的 SQL 查询:

INSERT INTO ReiseMaster ([Col1],[Col2],[Col3])
SELECT [Col1],[Col2],[Col3] FROM Update_Import 
  WHERE NOT EXISTS(SELECT 1 FROM ReiseMaster
  WHERE Update_Import.[Col1] = ReiseMaster.[Col1]);

在该过程之后,我正在努力确定新数据集的数量,这实际上已经由 MS Access 本身以某种方式确定(参见弹出窗口)。所以我的想法是只使用 MS Access 已经确定的数字。

所有 SQL 查询都存储在一个字符串中,并由“DoCmd.RunSQL”命令运行。

标签: vbavariablesms-accessinsertstore

解决方案


使用 DAO,很容易获得执行查询后受影响的记录数。

您可以只使用该Database.RecordsAffected属性:

Dim db As DAO.Database
Set db = CurrentDb 'Required, don't use CurrentDb.Execute else this won't work
Dim strSQL as String
strSQL =  "UPDATE ReiseMaster INNER JOIN Update_Import" 'and the rest of your query
db.Execute strSQL, dbFailOnError  'Execute the query using Database.Execute
Dim recordsAffected As Long
recordsAffected = db.RecordsAffected 'Get the number of records affected

但是,这不允许您在提交查询之前看到它。要查看它并显示提示,您可以使用事务(此处的简短示例),如果用户不选择提交,则回滚事务。


推荐阅读