vba - 通过 VBA 中的操作查询获取受影响记录的数量
问题描述
我想知道在 VBA 运行时将特定数量的新数据行插入到表中时是否可以选择 MS Access 正在使用的变量。
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”命令运行。
解决方案
使用 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
但是,这不允许您在提交查询之前看到它。要查看它并显示提示,您可以使用事务(此处的简短示例),如果用户不选择提交,则回滚事务。
推荐阅读
- python - NotImplementedError:此传输语法 JPEG 2000 图像压缩,无法读取,因为 Pillow 缺少 jpeg 2000 解码器插件
- javascript - 有没有办法将 typescript 编译成 es6 但强制它使用 requirejs?
- firebase - 无法使用 Firebase 发送测试消息,因为“没有配置测试设备”
- java - Gradle 6.5 和 Java 14 - IllegalArgumentException:无法将字符串值“VERSION_14”转换为类型的枚举值
- javascript - 未触发 ag-grid 比较器功能
- python - Scrapy Process 在第二个蜘蛛完成爬行后停止执行,而不等待第一个完成
- python - 为什么 MariaDB 不会通过 Python 返回任何其他方式都可以正常工作的查询?
- html - HTML选择没有类的特定元素
- database - 在 dbmaintain 中执行时数据库脚本失败
- node.js - 如何从 Mongo ObjectIDs 数组中获取多个项目