0

ユーザーがリストボックスからコードを選択できるようにするアプリケーションに取り組んでいます。この値は、SQLクエリに関連付けられたサブフォーム(連続)にパラメーターとして渡され、フォームに返された値を入力する必要がありますクエリ。

リストボックスの変更がサブフォームに登録され、それに応じて(子フォーム)が再入力されるように、親フォームのリストボックスを連続フォーム(子フォーム)に関連付けるにはどうすればよいですか?

以下のコードは、サブフォームの変更をトリガーするために現在親フォームにあるものです。しかし、これでサブフォームの情報のリロードをトリガーするビットがまだありません。

ストアドプロシージャ

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
4

2 に答える 2

1

リストボックスが 1 つの項目のみを許可する限り、サブフォームのリンクの子フィールドとマスター フィールドを使用してこれを行うことができます。

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
于 2012-08-13T14:52:37.327 に答える