2014-01-08 47 views
2

我對Access VBA編程非常新穎。這是我在Access中創建表單時遇到的一個問題。我需要將表單的記錄源鏈接到我已經定義的查詢對象。假設我在查詢中有field1,field2,field3等。最終的產品,我想目前是使用Dynamic SQL設計Access窗體作爲記錄源

  1. 在窗體的頂部,也有用戶的字段1輸入過濾規則,場2,場3幾種文本框...和
  2. 上的點擊按鈕,除了查詢中的現有字段外,還會在表單底部顯示數據表,其中應用了過濾標準
  3. ,我需要在數據表的末尾包含一個基於field1和field2的特定計算結果的自定義列。可能會顯示一些文本,例如「Late」,「Early」或「On Time」

我想出了兩種設計方法,但由於缺乏VBA編程經驗,我無法完成本他們現在的一個...

設計1:

我有一個標準的輸入文本框主要形式。這個主窗體沒有鏈接到任何數據源。然後我有一個底層的子表單,其數據源是通過讀取主窗體中的文本框的值來動態設置的。

設計2:

我有一個單一的形式,但我轉移的所有標準盒到窗體頁眉部分。此表單有一個來自我的查詢對象的記錄源。詳細信息部分用於顯示錶單的篩選器屬性設置爲用戶標準的數據表。

我無法做設計1,因爲我不知道如何動態地爲我的子表單設置數據源。我也無法做設計2,因爲即使我在設計視圖中檢查了表單頁眉/頁腳已啓用,我的表單的標題部分也不會出現。

如何才能實現我的表單設計?任何替代設計建議?

我在這個開發中使用Access 2003,但我希望我的代碼可以升級到Access 2010。

在此先感謝您的建議。

+0

對於設計1,我也想知道子窗體是否應該最初插入爲未綁定的對象。以後我是否需要在這個子表單中設置每個字段的數據源? – got2nosth

+0

您是否認爲將條件字段稱爲子窗體鏈接子字段?鏈接主字段:txtField1,txtField2 - 鏈接子字段:Field1,Field2。主窗體不需要綁定到記錄源,您可以參考控件本身。它可能不適合,但如果是這樣,它是迄今爲止篩選子表單的最佳方法。 – Fionnuala

+0

@Remou我沒有想到這種方式。但是當我的子對象的源對象設置爲查詢對象並嘗試鏈接子字段時,出現錯誤「無法在未綁定的表單之間建立鏈接」。通過這種方式設置源對象,我還可以向子表單添加額外的列嗎?並且是一對一的鏈接關係,如Field1 = txtField1,Field2 = txtField2 ...我如何指定兩個字段值之間的條件?謝謝 – got2nosth

回答

2

有了這兩種設計,你應該動態地建立數據源,像這樣:

sql = "SELECT * FROM MyTableOrQuery WHERE 1=1" 
If Not IsNull(textBox1) Then 
    sql = sql & " And Field1 = '" & textBox1 & "'" 
End If 
If Not IsNull(textBox2) Then 
    sql = sql & " And Field2 = '" & textBox2 & "'" 
End If 

最後,指定SQL到窗體的數據源。

設計1

下面的代碼放在主窗體,毗鄰以上:

SubFormControlName.Form.RecordSource = sql 

設計2

要顯示在您需要的標題部分的控制將屬性DefaultView設置爲運行表格(我不知道extact翻譯,我使用Access在西班牙語) 在這種情況下,數據源被分配到主窗體

Me.recourdsource = sql 

對於你的第三點: 可以使用

Iif(fieldA<5,"Early",Iif(fieldA>10,"Late","OnTime")) 

建立計算字段,或者您可以使用conditional formatting。我認爲這個選項是最清晰的

+0

感謝您的回覆。但是,我仍然有以下vba代碼的問題!Child16.Form.RecordSource = sql其中Child16是我插入到主窗體中的子窗體的名稱。我在主窗體中用一個按鈕點擊事件來調用它。訪問給我錯誤2467:你輸入的表達是指關閉或不存在的對象 – got2nosth

+0

至於設計2,我相信你指的是defaultview屬性的「連續形式」。但我不喜歡這裏的連續形式的佈局。是否真的沒有辦法以數據表視圖作爲defaultview來做到這一點?或者是否有其他地方可以將我的標準框放在數據表格中? – got2nosth

+0

對不起,但對於連續的形式,只有這種佈局。如果你喜歡數據集,你應該選擇1. 對於上面的註釋:確保Child16是包含子窗體的控件的名稱,而不是表單的名稱。通常,爲了避免這種錯誤,我以相同的方式命名錶單和控件。 – mnieto

相關問題