我有一個SQL Server的Access客戶端,它使用帶有多個子窗體的選項卡式窗體。基本上,在主窗體上選擇了一個產品,然後該標籤可以訪問編輯/插入存儲在不同相關表中的產品的不同屬性(選項,顏色,styes等)。每個子表單使用它自己的記錄源,但是會同步到產品編號上的主窗體。MS Access選項卡式多個OnCurrent發射
所以,我有一個子窗體中的組合框,將其稱爲「選項」,我想填充來自使用「where」子句中的產品編號的查詢的數據。這就是我需要做的。我如何做到這一點是使用Options子窗體的OnCurrent事件來設置RowSource等於一個SQL字符串。這很有效,但是... OnCurrent事件每次在主窗體中選擇新產品時觸發,無論Options子窗體表單是否具有焦點。然後,當選項獲得焦點時,它再次啓動。然後,由於選項使用數據表佈局,因此即使記錄源不需要更改,它也會觸發所選的每個記錄。
雖然這可以工作,但是很多不必要的數據被來回發送到(非常)遠程的SQL Server。那麼,是否有另一個事件可以用於整個子表單,理想情況下只是觸發一次,而不是子表單中的每條記錄?我嘗試了焦點,但從未解僱。當選擇新產品時(當然),Open和Load事件不會觸發。或者,也許有另一個地方,我應該設置選項子表單記錄源?
這裏的事件代碼:
Private Sub Form_Current()
Dim sql As String
sql = "SELECT O.[OptionID], O.[Caption] FROM ProductOptions AS O WHERE o.[OptionTypeID] in (1,2,8,9) AND o.ProductNumber = "
sql = sql & "'" & Nz(Forms![products main form]!ProductNumber, "99test") & "'"
oidSelect1.RowSource = sql
End Sub
感謝您的幫助。
吉姆
因此,您正在設置組合框的RowSource而非敘述中所述的RecordSource?爲什麼使用代碼來設置組合框的RowSource?爲什麼不在RowSource屬性中使用SQL語句,然後在組合框GotFocus事件中執行代碼就會執行RowSource的Requery? – June7
嗯,過濾器(where子句)必須動態設置,因爲它對於當前正在編輯的每個產品都會發生變化。並且不會使用GotFocus作爲組合框重新選擇的每個記錄? (這是一個網格視圖,所以組合框在每一行都被複制。) – user3091705
組合框RowSource SQL語句WHERE子句將引用ProductNumber,因此它將是動態的。 Seth的回答是沿着這些線,除了我會使用組合框GotFocus事件觸發重新查詢。他確實對主要形式的依賴很好。通常,主要和從屬組合框的形式相同。另外,帶有查詢顯示別名值的組合框在連續數據表或數據表格中不起作用。 – June7