MS Access链接表插入事务提交

时间:2018-01-05 21:13:36

标签: sql-server ms-access

我有一个Access 2016数据库,最初是作为经典访问MDB开始的。一路上,它被转换为.accdb,并链接到后端SQL Server。使用的所有表都转换为链接表。

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

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

DoCmd.OpenReport(...)

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

通过使用来解决这个问题是否合理。假设我的问题是数据未及时提交给SQL表以供Report Execution查看,那么以下代码是否会确保这一点?

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

1 个答案:

答案 0 :(得分:0)

如果您正在使用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连接。