我想知道当在VBA运行时发生的表中插入特定数量的新数据行时,是否可以选择MS Access正在使用的变量。
MS Access通知的屏幕截图(德语):
在这种情况下,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”命令运行。
答案 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),如果用户未选择提交,则回滚事务。