2012-08-13 72 views
0

我正在研究一個應允許用戶從列表框中選擇代碼的應用程序,並且此值應作爲參數傳遞給子表單(連續)它綁定到SQL查詢以使用從查詢返回的值填充表單。MS Access通過參數化查詢動態填充連續表單子表

如何將父窗體上的列表框連接到連續窗體(子窗體),使列表框中的更改在子窗體中註冊並且它(子窗體)會相應地重新填充?

下面的代碼是我目前在我的父窗體中觸發子窗體中的更改。但是我仍然錯過了觸發子表單中信息重新加載的位。

storedproc

SELECT tblACCOUNT.ACCOUNT_LABEL, tblACCOUNTValue.[ACCOUNTVALUE_VALUE] 
FROM ((tblUPS INNER JOIN tblProductUPS ON tblProductUPS.[PRODUCTUPS_UPS] = tblUPS.[UPS_CODE]) INNER JOIN tblACCOUNT ON tblUPS.UPS_ID = tblACCOUNT.ACCOUNT_UPSID) INNER JOIN tblACCOUNTValue ON tblACCOUNTVALUE.[ACCOUNTVALUE_ACCOUNTID]= tblACCOUNT.[ACCOUNT_ID] 
WHERE TBLPRODUCTUPS.[PRODUCTUPS_PRODUCTID] = (SELECT tblProductLevel.[PRODUCTLEVEL_ID] 

FROM tblProductLevel WHERE tblProductLevel.[PRODUCTLEVEL_Code] IN ([UPSIDS]) 

    ); 

這是我的子窗體字段,我想綁在我的查詢作爲查詢參數的來源。

Public Property Let qString(unstring As String) 
    If Not IsNull(unstring) And Len(unstring) > 0 Then 
      Currentstring = unstring 
    End If 
End Property 

下面的代碼是在我的母體形式我測試代碼直接連接到我創建和直接傳遞參數到查詢查詢。但是,由於我的子表單本身與查詢綁定,我需要一種方法來獲取子表單查詢並傳遞我需要傳遞的信息,然後在表單上調用更新。

Private Sub LoadSubform(unspscstring As String) 
On Error GoTo Err_LoadSubform_Change 

      Dim dbs As Database 
      Dim strSQL As String 
      Dim strSelect As String 
      Dim strQueryName As String 
      Dim qryDef As QueryDef 
      Dim rst As Recordset 
      Dim prmOne As DAO.Parameter 

      Set dbs = CurrentDb 
      'then we'll open up the query: 
      Set qryDef = dbs.QueryDefs("spgetAttributeByUNSPSC") 
      'Now we'll assign values to the query using the parameters option: 
       'link your DAP.Parameters to the query 
       'Set prmOne = qryDef.Parameters!param_one 
       'prmOne = unspscstring 
      qryDef.Parameters(0) = unspscstring 
      'Now need to somehow trigger an update on the subform 

      'Close all objects 
      rst.Close 
      qryDef.Close 
      Set rst = Nothing 
      Set qryDef = Nothing 
Bye_LoadSubform_Change: 
        Exit Sub 

Err_LoadSubform_Change: 
Beep:      MsgBox Error$, 16, "Select Failed" 
        Resume Bye_LoadSubform_Change 

End Sub 
+0

爲什麼你覺得有必要這樣做,對付所有設置子表單的常用方法? – Fionnuala 2012-08-13 16:25:13

+0

你真的在使用DAP嗎?他們前段時間過時了。 – Fionnuala 2012-08-13 16:28:27

+0

我對ACCESS相對來說比較陌生,所以我可能不會意識到處理這種情況的常見方法 – Kobojunkie 2012-08-13 16:39:57

回答

0

只要列表框中只允許一個項目,你可以使用子窗體的鏈接子和主域做到這一點。

Link Child Fields: ID; ListFieldMatch 
Link Master Fields : ID; MyListBox 

或者,也可以設置在VBA窗體控制的形式對象的記錄源:

sSQL = "SELECT ID,Stuff FROM Table WHERE ID=" & Me.MyNumericListBox 
Me.MySubformControlName.Form.RecordSource = sSQL 
+0

有關的產品的子表單,我認爲要做的就是從我的父表單傳遞參數,然後讓子表單獲取並重新 - 運行查詢。這不是應該如何做? – Kobojunkie 2012-08-13 15:37:44

+0

恐怕您發佈的代碼無法在MS Access中運行。 – Fionnuala 2012-08-13 15:50:14

+0

我剛纔調試了那段代碼。最後請看新的代碼和評論。 – Kobojunkie 2012-08-13 16:34:37

0

sSQL = 「SELECT ID,東西FROM表WHERE ID =」 & Me.MyNumericListBox Me.MySubformControlName.Form.RecordSource = sSQL

給出了一個錯誤2467運行時錯誤

「您輸入的表達式指的是一個關閉或不存在的對象。

+0

請改善內容格式。它不清楚你的解決方案是什麼 – 2014-02-14 11:06:02