Access 2013:我可以使用数据宏触发 MS SQL SP 而不延迟 Access 中的执行吗?

Posted

技术标签:

【中文标题】Access 2013:我可以使用数据宏触发 MS SQL SP 而不延迟 Access 中的执行吗?【英文标题】:Access 2013: could I use a data macro to trigger an MS SQL SP without delaying the execution in Access? 【发布时间】:2016-01-29 12:48:12 【问题描述】:

我的客户使用多用户拆分 Access 数据库(即服务器上的后端数据库,每台 PC 上的客户端数据库)作为销售点系统以及管理功能。

他现在需要它来更新远程 MS SQL 数据库,但不能在客户等待时降低 Access 客户端的速度。如果我在访问客户端数据库中的每个更新/追加/删除中添加代码以运行 SQL SP,它会大大降低每个事务的速度(我已经尝试过了)。

我想知道是否可以在后端 Access DB 上使用触发器宏来运行 SQL SP,而不会降低客户端 DB 的速度。客户端数据库是否必须等待触发器宏运行才能恢复其工作,或者这是将客户端与服务器上发生的 SQL 更新断开连接的好方法?

我从来没有使用过触发宏,为了测试它,在每个表上研究和创建这些宏将是大量工作,如果有人能回答上述问题,它可以为我节省很多时间(可能浪费) 工作!

【问题讨论】:

如果这是实现事务日志,可以在SQL Server上创建触发器,完全不会影响客户端性能。 将后端迁移到 SQL Server 可能会更容易,然后您可以实现插入/更新触发器。 Access 本身不支持表级别的此类触发器。 正如我的问题所说,它不是用于事务日志记录,而是需要触发器的访问数据库。如果有人对 Access 触发宏有所了解,我认为这个问题应该很容易回答;我不需要任何其他建议谢谢 Access 在 Access 2010 之后支持表级别的事件触发器,所以我需要有这方面经验的人 【参考方案1】:

我想知道是否可以在后端 Access DB 上使用触发器宏来运行 SQL SP

不直接,不。 Access 中的事件驱动数据宏无法执行外部代码(VBA 例程、传递查询等),也无法对链接表进行操作。

可以做的是在主表上使用事件驱动的数据宏来收集存储过程所需的信息并将其保存在单独的“排队”表中后端,然后每隔几分钟(左右)运行一个计划任务来调用存储过程并将“排队”信息传递给它们。

【讨论】:

好的。我会调查的。感谢您为我指明正确的方向。【参考方案2】:

我更简单的解决方案可能是使用指向 SQL 数据库的链接表,然后创建并调用一个 VBA 函数,该函数使用该函数构建和执行更新查询。在链接表上使用 SQLPassthough。这允许函数立即返回,避免 SQL 数据库中的维护和开销,以及所有初始设置时间。如果需要,链接表还可以保留所有连接,包括用户名和密码。

来自数据宏的 DAO SQLPassthrough 调用的 STUB

VBA 函数(通用代码)

Public Function SetTimeStamp(ByVal RecordID as Variant)

   Dim strSQL As String
   Dim db As DAO.Database

   strSQL = "UPDATE tblName SET tblName.TimeStampField = " & Now()
   strSQL = strSQL & " WHERE RecordIDField = " & RecordID
   Set db = CurrentDB()
   db.execute strSQL, dbSQLpassThrough + dbRunAsync

End Function

要在更新后事件中实现,请使用 SetLocalVar 调用函数 数据宏(通用代码)

If Updated("MyField1") or Updated("MyField2") or Updated("MyField3")
   SetLocalVar 
            Name  varTemp
      Expression  =SetTimeStamp([TableName].[RecordIDField]
End If

这将导致函数执行。它反过来使用 SQLPassThrough 和异步选项运行查询,这会导致 Access 应用程序的速度为零。它可以很容易地修改为将表名和时间戳字段名称作为参数传递,这样就可以在任何表上使用,写入更多字段等。

我发现单个 Access 函数的优势在于,如果您决定增强它,您只需将数据字段添加到表中并修复单个函数。此外,没有计划任务或需要维护的队列,这使得它成为一种更清洁的解决方案。

艺术

【讨论】:

以上是关于Access 2013:我可以使用数据宏触发 MS SQL SP 而不延迟 Access 中的执行吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 中触发

通过电子邮件发送 PDF 报告时触发 MS Access 宏

暂时禁用 MS Access 数据宏

使用宏过滤带有组合框的表单 - MS Access

用于启动外部程序的 MS Access GUI 宏?

如何从 C# 调用 MS Access 数据库宏