我有一个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(...)
答案 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连接。