簡體   English   中英

最佳實踐SQL Server / Access連接

[英]Best Practice SQL Server/Access connections

冒着啟動ODBC / OLEDB爭論的風險,有沒有人有任何關於將Access Front End鏈接到SQL Server后端的最佳實踐建議?

我已經閱讀了有關.ADP vs .MDB的文章,並且還通過無DNS連接信息並同意這一想法。

我的主要問題是關於數據和性能的鏈接。 在過去,我發現在直接連接到SQL數據庫時表單速度很慢,我在“OnOpen”事件中測試了基於ODBC鏈接表的表單和OLEDB連接,發現OLEDB方法雖然不是很好但更快。 因此,我已經實現了在打開表單時修改數據然后在本地復制數據的例程,然后在完成時寫回數據庫,但這有其自身的問題。

有沒有人對這種設置的最佳實踐方法有什么建議? 我是否遺漏了一些可以改善直接鏈接到SQL Server的表單的內容?

任何評論或提示贊賞。

您必須將網絡流量降至最低,尤其是確認交換。 通過盡可能在SQL服務器上獨占運行SQL來執行此操作,僅將完整的行集傳輸回客戶端。 不惜一切代價避免將服務器上的數據加入Access DB中的數據。 這應該讓你開始。

基本方法是簡單地使用鏈接表。

使用ODBC時,您不應該看到任何真正的區別。 ODBC是首選方法,微軟已經宣布結束了對oleDB的支持(大約10年前.net社區留下了oleDB和ADO)。

您可以將表單綁定到這些鏈接表,並獲得良好的性能。 簡單的技巧是減少和限制拉動的記錄。 當您啟動這些綁定表單時,可以通過使用SIMPLE where子句來實現此限制。

因此,如果您啟動綁定發票表單並在標准打開表單命令上提供where子句,則只會提取一條記錄。 如果你有一個綁定的子表單,那么只有正確的記錄也會從服務器中提取出來。 因此,99%的案例中都不存在使用oleDB或ADO的優勢。

因此,作為一般開發方法,您可以在大多數情況下使用綁定表單。

需要注意的是,對於某些連接和任何具有聚合查詢的內容,您需要將鏈接表用於sql視圖。 您還可以考慮使用傳遞進行報告,但是傳遞往往更多的工作,並且鏈接視圖意味着您可以保留現有的VBA代碼,可能(希望)使用“where”子句打開這些報告並再次限制記錄拉下網絡管道。

對於執行服務器端命令的動態傳遞,我使用以下代碼:

Dim qdfPass       As DAO.QueryDef 

Set qdfPass = CurrentDb.QueryDefs("MyPass") 
qdfPass.SQL = "exec sp_myProc " & "p1"
qdfPass.Execute  

如果您需要以上內容來返回記錄,那么就去:

Dim qdfPass       As DAO.QueryDef 
Dim rstData       As DAO.recordSet
Set qdfPass = CurrentDb.QueryDefs("MyPass") 
qdfPass.SQL = "exec sp_myProc " & "p1"
set rstData = qdfPass.OpenRecordSet

因此,您可以使用非常少的代碼即時更改/修改上面的sql以進行傳遞查詢。 因此,在一天結束時,您可以實現一流的性能,並且只需對現有應用程序進行很少的編碼更改即可實現。

所以目前推薦的方法是使用DAO。 並且請記住,現在已宣布針對sql server的oleDB(和ADO)的生命終止支持。 看這里:

http://blogs.msdn.com/b/sqlnativeclient/archive/2011/08/29/microsoft-is-aligning-with-odbc-for-native-relational-data-access.aspx

暫無
暫無

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

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