【问题标题】:MS Access linked table insert transaction commitMS Access 链表插入事务提交
【发布时间】:2018-01-05 21:13:35
【问题描述】:

我有一个 Access 2016 数据库,它最初是一个经典的 access MDB。在此过程中,它被转换为 .accdb,并链接到后端 SQL Server。使用的所有表都已转换为链接表。

有代码执行类似这样的代码:

sql = "insert into [TableA]..."
CurrentDB.Execute sql

DoCmd.OpenReport(...)

我发现在 OpenReport 命令从同一个表中选择数据之前,间歇性地插入后端 SQL 似乎没有完成。

通过使用来解决这个问题是否合理。假设我的问题是数据没有及时提交到 SQL 表以便报告执行看到它,下面的代码会确保这一点吗?

sql = "insert into [TableA]..."
CurrentProject.Connection.BeginTrans
CurrentProject.Connection.Execute sql
CurrentProject.Connection.CommitTrans
DoCmd.OpenReport(...)

【问题讨论】:

  • 为了确定问题所在,就在打开报告之前,使用 dlookup 或其他工具检查表中的数据,以查看数据是否存在。
  • 不,该代码不能确保 INSERT 成功。确实需要确定 INSERT 失败的原因。数据会导致失败怎么办?在完成 INSERT 操作之前,Access 不应打开报表。

标签: sql-server ms-access


【解决方案1】:

如果您使用的是 ADO,则可以使用 RecordsAffected 输出参数来确定是否插入了记录。

您可以使用以下内容:

sql = "insert into [TableA]..."
Dim recordsAffected As Long
CurrentProject.Connection.Execute sql, recordsAffected
If recordsAffected <> 0 Then
    DoCmd.OpenReport(...)
Else
    'Nothing got inserted
End If

或者,如果你不喜欢额外的变量,你可以考虑使用辅助函数:

Public Function ADOExecute(Query As String) As Long
    CurrentProject.Connection.Execute Query, ADOExecute
End Function

sql = "insert into [TableA]..."
If ADOExecute(sql) <> 0 Then
    DoCmd.OpenReport(...)
Else
    'Nothing got inserted
End If

请注意,我强烈建议您使用与 SQL Server 的连接,而不是 CurrentProject.Connection,后者是与 Access 的 ADO 连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多