2016-06-07 66 views
0

我可以找到很多關於如何通過改變代碼中的底層源代碼查詢和重新查詢來返回子表單中的特定記錄的示例,但我正在努力使用相同的原則來改變返回的字段。可能通過VBA更改MS Access子表單字段?

我有以下情況:

Combobox選擇5個字段之一。子窗體應該顯示所選字段加上幾個靜態字段,讓它們稱爲字段6和7

因此,在用戶從下拉列表中選擇字段1的情況下,子窗體應顯示字段1,6和7。他們選擇4場的情況下,子窗體應顯示的字段4,6和7等

這是(除其他事項外)我已經試過:

設置窗體了通過與查詢嚮導(選擇field1,field6,field7)作爲源,在進行組合框選擇後修改所述查詢:

Set qd = CurrentDb.QueryDefs("myqueryname") 
qd.SQL = "Select " & mycomboboxselection & ",field6,field7 from mytablename" 
Form_mymainformname.mysubformname.Requery 

查詢本身更新正常,如果我在更改後運行獨立版,但主表單中的子表單不會更改,並且當我從導航窗口單擊子表單時,它似乎被卡住以查找字段1請我輸入一個參數值

任何人都可以幫助如何實現這個請嗎?

回答

2

設置子窗體的SQL的記錄源

Dim SQL As String 

SQL = "Select " & mycomboboxselection & ",field6,field7 from mytablename" 
Me!YourSubformControl.Form.RecordSource = SQL 

這將迫使子窗體的重新查詢。

+0

恐怕這ISN」 t工作,如果我選擇我已經與初始源對象設置的字段沒問題,但是如果我選擇任何其他字段,子表單中的字段名保持不變,它只是使用#name填充字段中的所有記錄? –

+1

@HelloWorld這是因爲如果你有控件綁定到一個名爲'mycomboboxselection1'的字段,並且你改變你的查詢爲'mycomboboxselection2',那麼第一個字段不再存在,所以控件不知道要顯示什麼,因此'#Name?您也需要適當地更改控制源。 – Brad

+0

@Brad,這應該可能是一個獨立的答案,如果我有棒的最終結果,那麼每次只需將它更新爲。*一次,就可以更新記錄源,並通過控制源該字段單獨即'Me!MySubForm.Form!MyField.ControlSource = Me!MyComboBoxSelection'。謝謝,效果很好 –

0

好吧,我在幾個小時的搜索和反覆試驗後發現了一個解決方案。

這裏有兩個獨立的問題。首先創建子窗體使用新創建的窗體作爲源對象,而不是直接使用查詢,並且似乎無論如何嘗試操作所述窗體的記錄源,它都不喜歡更改它所創建的字段。

因此,創建子窗體,從表單源對象更改爲您查詢(並刪除現在毫無意義的新創建的形式),那麼你可以使用我開始的代碼:

Set qd = CurrentDb.QueryDefs("myqueryname") 
qd.SQL = "Select " & mycomboboxselection & ",field6,field7 from mytablename" 

其中一期工程!那種....

你必須雖然每次看到實際的更新,關閉並重新打開的形式,這顯然不是我們所要的

其他線路不執行任何操作:

Form_mymainformname.mysubformname.Requery 

它適用於更改記錄,但顯然不適用於字段更改。我懷疑這是一個有點毫秒怪癖

的下方,但是,工作的,即使我覺得它應該做到完全一樣,上面的代碼行:

Form_MyForm.MySubForm.SourceObject = Form_MyForm.MySubForm.SourceObject 
+1

如果您將字段名稱從表單文本框名稱中分離出來,您可以使生活變得更加輕鬆:'SQL =「選擇」&mycomboboxselection&「AS Text0,field6 AS Text1,field7 AS Text2 from mytablename'。將您的源代碼更改爲:'SQL =「選擇」&mycomboboxselection&「,field3 AS Text1,field4 AS my Text2 from mytablename'將會順利運行,因爲您不再綁定字段本身,而只是綁定它們的別名,不得不改變你對綁定的要求 – SunKnight0