2008-10-14 103 views
2

Microsoft Access是訪問MS SQL Server後端數據庫中數據的流暢方式,但我一直在訪問(可以這麼說)訪問大型數據表時遇到問題,尤其是當試圖在Access中的結果和設計模式之間切換。MS Access查詢設計在連接到SQL Server時掛起

訪問給了我很多漂亮的東西,其中最重要的是Crosstabs,但這個與服務器的連接使我有點瘋狂!

是否有任何MS Access技術人員知道如何優化ODBC連接,因此當我只是想調整和構建我的查詢時,它並沒有做什麼似乎是全表掃描?

回答

4

ODBC驅動程序將盡可能多地向SQL Server傳遞工作,但只要使用像Nz這樣的vba函數或像PIVOT這樣的非SQL Server語法,那麼ODBC驅動程序就必須撤回更多的數據和索引才能獲得在客戶端完成工作。

按照其他答案或者在SQL Server中構建您的視圖並鏈接到視圖或使用Access數據項目。

注意:具有未知列數的PIVOT查詢無法在SQL Server中以與Access本身相同的方式處理 - 因此,如果您在Access中針對SQL Server數據運行數據透視表,您可能會將整個表格拉回。必須在SQL Server中使用動態SQL技術構建數據透視查詢,或者使用所有列進行硬編碼的預保存視圖。看看這個鏈接,做到這一點的一種方法:

http://www.sqlservercentral.com/articles/Advanced+Querying/pivottableformicrosoftsqlserver/2434/

0

不幸的是,Access不能將大量的工作推送到服務器,是的,在SQL Server中設計針對多個表或視圖的查詢時,它會執行大量的表掃描。

您可以使用SSMS在SQL Server中構建和調整查詢(視圖),並將視圖存儲在SQL Server中,以大幅提升性能並仍然使用Access作爲前端。

+0

不一定。Jet非常聰明(在SQL Server上打開跟蹤並觀察Jet實際發送到SQL Server的內容),並且如果您的SQL Server表上有適當的索引,並且沒有任何帶有表達式的WHERE子句,它應該將它全部發送到服務器進行處理。 – 2008-10-15 19:55:18

1

正如其他人所說,以提高對大型表性能的唯一方法是讓SQL Server數據庫引擎做的工作適合你。這樣做還沒有被提及的方法是使用一個傳遞查詢,這將使你把所有的代碼在MS Access,而無需在SQL Server上創建對象:

http://support.microsoft.com/kb/303968

您將不得不編寫SQL Server T-SQL而不是Access方言;但是,SQL 2005(以兼容模式90運行時)確實支持PIVOT命令。

1

我的類似問題是在選擇鏈接表/ ODBC連接後掛起了ORACLE ODBC連接。任務經理說10分鐘後沒有迴應。然後,連接對所有可用的表進行ping操作。我已經開啓了對ORACLE ODBC Administrator的日誌記錄,因此它必須將所有這些內容寫入日誌,並在幾小時內減慢結果。一小時後,日誌爲60 MB,當我關閉它時,一切都很順利!

要關閉它,請進入Oracle安裝/網絡管理/ MS ODBC管理員/跟蹤選項卡並將其關閉!

關於ODBC的一個很好的資源是這裏:http://eis.bris.ac.uk/~ccmjs/odbc_section.html