簡體   English   中英

MS Access鏈接表插入事務提交

[英]MS Access linked table insert transaction commit

我有一個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(...)

如果使用的是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連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM