通过VBA中的操作查询获取受影响的记录数

时间:2018-12-14 08:22:20

标签: vba variables ms-access insert store

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

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

Screenshot of the MS Access Notification (in German)

在这种情况下,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;

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

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”命令运行。

1 个答案:

答案 0 :(得分:1)

使用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

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