【问题标题】:Getting the number of affected records by an action query in VBA通过 VBA 中的操作查询获取受影响记录的数量
【发布时间】:2019-05-15 11:54:13
【问题描述】:

我想知道在 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;

然后,在第二步中,主数据库中不存在的新数据集将插入其中,其中包含它们包含的所有信息。这是负责在 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”命令运行。

【问题讨论】:

  • 我倾向于认为它无法访问。
  • 可能不是,但根据提供的信息我们不可能说。如果代码正在做一些事情来追加记录,那么它更有可能从代码的操作中提取信息。但是由于您不提供minimal reproducible example,因此无法知道...
  • 如果您使用DoCmd 语句插入数据,这些提示会自动生成,并且无法从中提取数据。相反,您可以重写代码以使用 DAO,然后您可以自己获取受影响的记录数,显示提示并保留信息。
  • 我已经更新了我上面的帖子,通过添加 SQL 查询和它们将由 DoCmd.RunSQL 语句运行的提示来满足预期。感谢cmets直到现在,所以基本上没有可能直接获取该值,而是我必须使用DAO自己计算数量,对吗?
  • @Xalion 好吧,你必须停止通过 DoCmd 执行查询,并使用 DAO 执行它。请指定是否要显示提示(例如当前显示的查询),然后我可以提供一个提供预期行为的答案(提示是一些额外的工作)。还请考虑将您的问题的标题调整为 如何在 VBA 中获取受操作查询影响的记录数,以便将来的访问者更容易找到

标签: vba variables ms-access insert store


【解决方案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),如果用户不选择提交,则回滚事务。

【讨论】:

  • 哇,居然有一个“RecordAffected”属性!这确实很有帮助。如果我想为用户创建提示,我将查看简短示例,感谢您的提示和帮助!
猜你喜欢
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2011-05-01
  • 2013-02-16
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2018-05-13
相关资源
最近更新 更多