2013-04-05 205 views
2

我有一個基本的SELECT查詢從Access形式需要一段時間來執行發射,所以我想以異步方式運行查詢,讓我的用戶繼續使用的形式(或至少讓他們更新進展情況)。的MS Access異步查詢

的問題是,訪問凍結被執行的代碼,當應用程序,出現在用戶已經墜毀 - 即使到Windows的標誌是「沒有響應」和捧殺的地步。顯然不是很用戶友好!我嘗試使用MSDN here和變體方法here上列出的代碼。

這兩種方案似乎運行查詢「異步」(代碼塊燒製的異步查詢完成,且rs_FetchProgressrs_FetchComplete事件(或在第二溶液cn_ExecuteComplete事件),火災和運行......但Access的界面直到查詢執行完畢。調用在不同的地方RepaintDoEvents(如rs_FetchProgress事件),似乎沒有任何效果仍然鎖定。

我懷疑它的相關信息,但此視圖SELECT編輯從是在SQL Server中,視圖不會返回大量的數據,但需要大約20秒的時間來處理。

+0

您是否嘗試過使用'DoEvents' – 2013-04-05 14:16:07

+0

我有一段時間沒有使用過Access,但曾經有一個「傳遞」選項,後端將執行完整查詢,包括連接和過濾由where條件。當不使用傳遞模式時,Access會通過線路從後端帶來大量數據,並在客戶端執行很多工作,並且這種行爲似乎是同步的。 – Tim 2013-04-05 14:18:59

+0

我做過了,用「Repaint」在不同的地方塗上它。似乎沒有任何效果。 – Kai 2013-04-05 14:19:02

回答

1

當您打開窗體不要拉一個巨大的記錄。將表單建立在一個查詢上,當第一次加載時只會拉出幾個或甚至沒有記錄。然後爲用戶提供一種方法來選擇不同的合理大小的記錄子集。

儘量避免,無論數據源是否是一個鏈接Access表或客戶機 - 服務器數據庫中提取巨大的記錄。

+0

沒有巨大的記錄集合 - 查詢只返回大約80條記錄。它是從需要相當長的時間來處理(在更大的記錄進行各種骨料) – Kai 2013-04-05 14:25:42

+0

確定一個視圖中選擇,我沒有從你的問題。我沒有遇到過這樣的情況。假設你已經用盡了所有選項來優化視圖,想想我會嘗試用一行虛擬值打開表單。然後在稍後的事件(加載或當前)中,打開ADO記錄集async和useclient。當它被完全填充時,將其分配爲表單的記錄集。但我不知道是否足以消除「沒有迴應」的問題。它可能被證明與你現在擁有的一樣不合適。 – HansUp 2013-04-05 14:46:51