2014-04-06 24 views
1

我試圖瞭解如何使一個.mdb文件的查詢工作。 假設文件位於共享驅動器PC2上,我從PC1以編程方式打開它。MS-Access SQL查詢如何在位於遠程的.mdb文件上運行?

當我連接到一個.mdb文件時,我假設沒有MS Access的「實例」在PC2上啓動(因爲它是一個簡單的文件服務器)。它是否正確?

當我做一個SQL查詢時,它是否必須在本地複製表,然後運行查詢,然後返回我的結果並扔掉表和任何多餘的數據?

如果我在查詢中「排序」會發生什麼?是整個查詢返回,然後本地排序,或以某種方式遠程命令?

我確定我有其他問題,但我試圖瞭解如何連接到MDB文件從遠程位置工作。 (我所在的位置有相當多的延遲,所以特定的查詢可能需要9秒,在我的情況下這是不可接受的,我試圖瞭解這是如何工作的,以及是否可以改進)。

我正在用c#運行在這種情況下,我不認爲應該有太大的區別,但可能會在你的迴應中。

回答

0

你的直覺是正確的,mdb/mde dbs只是本地化處理的文本文件。以下是關於網絡性能的一些提示:http://www.granite.ab.ca/access/performancefaq.htm

但是由於SQL Server Express是免費的,幾乎沒有理由不遷移,特別是因爲Access有一個工具可以爲您管理。在小批量多用戶環境中(例如2-10),MS Access可以正常工作,但對於以任何方式可以使用大量用戶和/或事務的企業解決方案而言,您正在琢磨着什麼是災難。

+0

因此,關於SQL服務器,你可以推薦實際使用的任何網站?我嘗試了一些關於配置/設置的搜索,但是這些只是基本上展示瞭如何安裝,這是關於它的(不是實際使用)。 – onaclov2000

+0

下面是一個很好的開始任何地方,有一些鏈接在結束之前值得檢查: http://databases.about.com/od/tutorials/a/Migrating-To-Sql-Server -With-The-Access-Upsizing-Wizard.htm SQL Server非常寬容,一旦你瞭解了視覺差異,你會發現它非常直截了當。你甚至可以通過訪問數據庫中的查詢設置DSN,如果你願意的話可以繼續使用舊的構建器 - 這裏有一些更好的提示: http://dba.stackexchange.com/questions/39611/main-considerations -when-moving-from-ms-access-programming-to-sql-server – Tim

+0

只要重新閱讀你的問題,也許你的意思是? http://technet.microsoft.com/en-us/library/ms345343.aspx – Tim

3

當我連接到一個.mdb文件時,我認爲MS Access的「實例」沒有在[遠程機器]上啓動(因爲它是一個簡單的文件服務器)。它是否正確?

是。應用程序將與本地機器上的Access數據庫引擎副本進行交互,而本地機器上的Access數據庫引擎副本又會從遠程機器上的數據庫文件中檢索信息。

當我做一個SQL查詢,它必須在本地複製表,運行查詢,然後返回我的結果,並扔掉表和任何多餘的數據?

不一定。根據涉及的表的索引方案,Access數據庫引擎可能只需要檢索相關索引,然後確定數據文件中包含要檢索記錄的特定頁面。在某些情況下,它可能需要檢索整個表格(例如,當需要全表掃描時),但並非總是如此。

如果我在查詢中「排序」會發生什麼?是整個查詢返回,然後本地排序,或以某種方式遠程命令?

的訪問文檔中說,索引將加快排序操作(參考:here),這表明Access數據庫引擎可以從有序遠程文件檢索所需的行。

+0

進一步降低 - 訪問可能像每個其他數據庫一樣工作,並將文件內部組織到頁面中。它不會加載表等,但它需要的頁面。如果是索引,它可能會避免加載包含表格數據的所有頁面。請注意,當多個客戶端在更新的同時訪問服務器時,這種方法使得訪問可能受到損壞,並且發生不良情況(電源故障,斷開連接)以及某些部分不一致。 – TomTom

+0

通過與OP指定的遠程PC(與文件服務器不同)的文件共享功能來尋呼功能嗎? – Tim

+0

@Tim如果遠程計算機是「PC」或「文件服務器」,Access數據庫引擎並不特別在意;它只是在任何一種情況下讀取和寫入SMB共享文件夾中的文件(並與可能同時使用該文件的Access數據庫引擎的其他副本配合使用)。 –

0

要添加到Gord的答案...

訪問數據庫通過Windows文件頁面鎖訪問。我的理解是,微軟添加了專門爲MS Access使用而鎖定的頁面(但也可通過Windows API使用任何文件)。

因爲實例是本地的,衝突和衝突是通過文件頁面鎖來處理的,所以客戶端 - 服務器爭用是一個問題。訪問在這裏有已知的問題。這就是爲什麼應該儘可能切換到SQL Server Express(也是免費的)。但是,是的,MS Access具有一定的便利性; SSE擁有更大的佔地面積和更不友好的GUI

所有桌面數據庫都有客戶端/服務器問題。 Gord的答案符合我的知識。索引的要點是減少需要在本地拉取的表數據量。與表格數據相比,提取索引是一項相對較小的任務。這是標準的索引優化,但我認爲對於桌面數據庫而言,由於遠程數據和文件分頁,這一點更爲重要。

通常,Access(JET)引擎遠程執行任何操作。這是所有文件數據抓取並在本地MSA/Jet引擎中執行的。你知道這是因爲引擎是本地安裝的,並且不必安裝在文件主機上。然而,這是分散處理負載的一種方便快捷的方法。 :)