2013-03-15 46 views
0

過去幾天我一直在努力確定這個問題的根源。我的互聯網搜索是什麼導致這個問題並沒有成果。MS Access(2010)VBA過濾器無法在一個子表上工作

這是一個程序使用Access作爲前端用戶界面,用於將客戶端信息輸入托管在SQL Server上的數據庫中。

的相互作用應該如下:在主窗體的客戶名單上

  • 用戶點擊
  • 帳戶列表顯示在主窗體上的帳戶的
  • 列表
  • 用戶點擊產品以表格形式顯示(用於更新/添加新產品)
  • 用戶選擇其中一個產品
  • 對應g每月產品值顯示在另一個子窗體上(不在產品列表子窗體下)

當主窗體初始加載時,默認情況下每月產品值過濾器值爲0。當其中一個產品被選中時,過濾器應該動態更新。它是在Form_Current事件下爲產品表單完成的。

我無法弄清楚的是:該過濾器似乎卡在默認狀態。我使用Debug.Print語句來檢查每月產品值表單的最新過濾器值,並顯示過濾器的正確產品ID。但它在UI上沒有更新。

什麼甚至離奇的是:它的工作原理(即月度值列)的某個時候,當我做出了VBA代碼更改(過濾,有時不相關)並保存它時,它在應用模式如:

.filter = "prod_id = " & iProdID 

.filter = "[prod_id] = " & iProdID 

但是當我將其更改爲設計模式,並開始做沒有涉及到這個問題的變化,它停止時,它在應用模式的再次合作。行爲如此不可預測,以至於我不知道如何繼續。我甚至刪除表單並重新創建它,它的行爲仍然相似。

我使用相同的方式在VBA中爲其他子窗體上的文件管理器工作,他們的行爲正常。希望得到我忽略的一些反饋!

謝謝! Kiat

+0

檢查並查看您是否將某些內容應用於'order by'或'filter'屬性,該屬性不應該存在。也可以在應用過濾器後嘗試添加'form.refresh'或'form.requery'。 – Scotch 2013-03-15 22:14:18

+0

過濾器和sql server有各種各樣的問題,看看是否有幫助http://stackoverflow.com/questions/14581749/wrong-recordcount-on-filtered-form-with-sql-view-datasource/14594444#14594444幫助。此外,艾倫布朗在這裏有一些說明http://www.pcreview.co.uk/forums/access-crashes-remove-filter-sub-form-t2772609.html可能或可能不相關。 – Fionnuala 2013-03-15 23:04:25

+0

您好蘇格蘭威士忌,默認情況下窗體上唯一的過濾器是「prod_id = 0」,在應用程序模式下,它根據產品列表表單的選擇更改爲prod_id = 。我在嘗試刷新和重新查詢之前沒有取得任何成功。有一次,它是在應用程序模式下,我編輯了過濾器的vba代碼,從prod_id到[prod_id],如後面的示例中所示,它工作正常,然後它沒有保存它並轉到設計模式並且再次回到應用模式。我在代碼的其他部分嘗試了相同的技巧,但結果並不一致。 – Kiat 2013-03-16 02:41:56

回答

0

我現在開始工作了。爲產品值分配過濾器的原始方法是將過濾器值直接分配給產品窗體的(Form_ProductsForm_Current事件中的產品值窗體(Form_ProductVals)。這是造成結果不一致的原因。

現在我更改了代碼以通過主客戶端窗體(包含Products和ProductVals子窗體)分配過濾器值。因此,代碼改爲從:

Form_ProductVals.Form.Filter = "prod_id = " & <new ID> 

Form_Clients.ProductVals.Form.Filter = "prod_id = " & <new ID> 

這做的伎倆。雖然我沒有對這個區別的解釋。