2013-09-22 80 views
0

我有一個Table table_clients和一個連接的表(1-> many)table_invoices。MS Acess:如何根據子窗體中的字段打開窗體

我有兩種形式:

Form1中(table_clients):所有客戶提供subform1(table_invoices):所有發票爲每個客戶

的窗口2並subform2都是一樣的,只是對象不同置於頁面上。

我希望當我在form1/subform1上打開一條記錄時,能夠點擊一個按鈕並打開由invoice_id和client_id過濾的form2/subform2。

謝謝!

回答

0

您可以使用類似下面的內容打開子表單,設置過濾器,然後指定過濾器。

Private Sub cmdOpenSubForm_Click() 
    DoCmd.OpenForm "table_clients" 
    Forms!table_invoices.FilterOn = True 
    Forms!table_invoices.Filter = "client_id = " & [txtClientID].value 
End Sub 

而且,如果子窗體處於打開狀態時,主窗體上記錄變化,你可能要重新從子過濾器,然後刷新。這將在On Current事件的主要形式來完成:

Private Sub Form_Current() 
    On Error Resume Next 
    Forms!table_invoices.Filter = "client_id = " & [txtClientID].value 
    Forms!table_invoices.Refresh 
End Sub 

在你必須有一個按鈕,名爲cmdOpenSubForm上面的例子。子表格必須命名爲table_invoices。該按鈕必須位於table_clients表單上。當前代碼應該在table_clients表單上。假設invoice_idclient_id是數字。 table_clients表單包含名爲txtClientID的文本字段。假設txtClientID字段引用table_clients的主鍵,並且table_invoices中的client_id字段是對應的外鍵。

如果你要點擊cmdOpenSubForm按鈕,會是什麼結果是:

  • table_invoices形式將被打開
  • table_invoices會進行過濾以顯示所有發票記錄 的client_id是當前目前在table_clients 表格

如果你想限制發票記錄比加t他去過濾器。

+0

嗨,我得到一個運行時錯誤438:對象不支持此屬性或方法。 此外,client_id位於invoice_id的父表單上。不應該以某種方式說明嗎? 謝謝! – michalis

+0

我更新了我的答案。我有一個錯誤,應該有一個'!'在Forms和table_invoice之間,而不是'''我還添加了一個更好的解釋。希望它有幫助。 – Linger

相關問題