簡體   English   中英

MS Access - 如何正確使用傳遞查詢作為表單源

[英]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_CloseForm_Unload處理程序來關閉記錄集,但沒有必要。

DAO 還緩存數據庫連接並在需要時重用它們(一些用戶使用它來將密碼保留在連接字符串之外,因為如果使用密碼建立連接,它會被緩存並且可以在鏈接表中使用而無需再次指定它,但這也會導致錯誤,例如DoCmd.TransferDatabase使用的SET IDENTITY_INSERT ON )。

也就是說,有其他方法,但它們都有優點和缺點。

暫無
暫無

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

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