[英]MS Access - How to properly use Pass-Through queries as source for form
在連接到 SQL Server 的 MS Access FrontEnd 中,我將傳遞查詢和通過文件 DSN(用於“簡單綁定表單”)的“正常”ODBC 連接組合用於表單。 在 VBA 函數和 Subs 中,我使用一些 ADO 連接來直接更改表中的數據。
我需要對某些表單進行直通查詢,因為我需要在帶有MEMO / NVARCHAR(max)
字段的表格上使用DISTINCT
關鍵字。
目前我正在使用傳遞查詢將數據輸入到我的表單中,如下所示:
strSQL = "SELECT DISTINCT tbl_Changes.Change_Nr, Title, Comment FROM [tbl_Changes] inner JOIN tbl_Parts ON tbl_Changes.Change_Nr = tbl_Parts.Change_Nr " & _
"WHERE '" & strProject & "' IN (" & strAllProjects & ") " & _
"ORDER BY tbl_Changes.Change_Nr DESC"
Dim qdf As DAO.QueryDef, rst As DAO.Recordset
Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = Application.TempVars("tempvar_StrCnxn")
qdf.sql = strSQL
qdf.ReturnsRecords = True
'Debug.Print strSQL
Set rst = qdf.OpenRecordset
Set Forms![frm_ChangePartsOverview].Recordset = rst
Forms![frm_ChangePartsOverview].Requery
'No rst.Close to have the data still in the Form!
Set qdf = Nothing
但我認為這不是正確的做法,或者是嗎?
關於您在評論中的擔憂:
rst.Close
在 VBA 中是多余的,垃圾收集器負責關閉記錄集,只有在極少數情況下您才需要手動關閉它們。
理論上,您可以使用Form_Close
或Form_Unload
處理程序來關閉記錄集,但沒有必要。
DAO 還緩存數據庫連接並在需要時重用它們(一些用戶使用它來將密碼保留在連接字符串之外,因為如果使用密碼建立連接,它會被緩存並且可以在鏈接表中使用而無需再次指定它,但這也會導致錯誤,例如DoCmd.TransferDatabase
使用的SET IDENTITY_INSERT ON
)。
也就是說,有其他方法,但它們都有優點和缺點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.