1

と呼ばれるコンボ ボックス (主キーとして機能する) を持つ MS Access フォームがありますcboProjectID。コンボ ボックスで選択が行われると、コンボ ボックスで選択された project_id で使用可能なものに基づいてエラー コードを表示するためにcboProjectID呼び出される別のコンボ ボックスがトリガーされるように、フォームを作成しようとしています。cboErrCod1cboProjectID

特定のプロジェクト ID では特定のエラー コードのみを使用でき、それらは別のテーブルで定義されています。HDR_ERRCODESただし、関連するというクエリを作成しProject_IDProject_Code可能性Error_Reason_Codeがある特定のproject_Id.

たとえば、プロジェクト コード (cboProjectID コンボ ボックスから選択) は、"FI-01-05"、"FI-01-01"、"SY-02-02" など) のようになります。選択すると、Project_IDはテーブルProject_DTA_REV_T(フォームがその情報を格納するテーブル) に格納され、Project_IDは単純に次の番号 (1、2、3、4 など) になります。

VBA コードを実行するときに複数の値を返すには、Recordset を使用する必要があることを理解しています。これは私が始めたコードですが、cboProjectIDコンボボックスフィールドの「変更時」コマンドでは機能していないようです:

Private Sub cboProjectID_Change()

Dim VarComboKey As Integer

Dim dbs As DAO.Database
Dim Err1 As DAO.Recordset

VarComboKey = Me.cboProjectID.Value

Set dbs = CurrentDb

Set Err1 = dbs.OpenRecordset("SELECT DISTINCT [Error_Reason_Code] FROM [HDR_ErrCodes] WHERE [project_ID] = " & VarComboKey)

Do While Not Err1.EOF
   Me!cboErrCod1 = Me!cboErrCod1 & Err1!Error_reason_code & " "
   Err1.MoveNext
Loop

Err1.Close
Set Err1 = Nothing

End Sub

私は VBA の専門家ではなく、Recordset のこの Web サイトで読んだコーディング方法論に従おうとしています。Access は、コンボ ボックスで選択されたプロジェクト ID に関連するError_Reason_Code特定の ではなく、すべてのタイプの を表示しています。Error_Reason_CodecboProjectID

誰かがこのコードをError_Reason_CodecboErrCod1 コンボ ボックスのProject_IDに表示する正しい方向に向けることができますかcboProjectID?

4

1 に答える 1

2

コンボ ボックスに表示される項目のリストを変更するには、その を変更する必要がありますRow SourceRow Source Type:Table/Queryとには 3 つのオプションがありValue ListますField List

Value listセミコロンで区切られた値のリストを取得し、選択のために表示します。たとえばRow Source、「Cat;Dog;Mouse」を入力した場合、ドロップダウンを選択すると次のようになります。

cat

dog

mouse

Field List行ソースとして選択したクエリまたはテーブルのフィールド名が表示されます。

Table Queryあなたが望むものです。これにより、指定したテーブルまたはクエリの値がコンボ ボックスに入力されます。コードで現在行っていることと、行Me!cboErrCod1 = Me!cboErrCod1 & Err1!Error_reason_code & " "はコンボ ボックスに現在表示されている値を変更していますが、展開したときに使用できる値には影響していません。これを行うには、Row Source作成済みのクエリでコンボ ボックスを変更する必要があります。

Me!cboErrCod1.RowSource = "SELECT DISTINCT [Error_Reason_Code] FROM [HDR_ErrCodes] WHERE [project_ID] = " & VarComboKey

したがって、レコードセットを変更する必要がないため、メソッドは以下のように変更されます。

Private Sub cboProjectID_Change()
    Dim VarComboKey As Integer

    VarComboKey = Me.cboProjectID.Value

    Me!cboErrCod1.RowSource = "SELECT DISTINCT [Error_Reason_Code] FROM [HDR_ErrCodes] WHERE [project_ID] = " & VarComboKey
End Sub

編集: 結果が何も返さない理由を確認するために、セットアップを複製しようとしました。私の仮定に間違いがあった場合は、これを修正してください。

cboProjectIDプロジェクト テーブルからすべてのプロジェクト ID を取得し (Select * from Projects;)、ドロップ ダウンにプロジェクト コードを表示するソースを持つコンボを使用してフォームを作成しました。という別のものを作りましたcboErrCod1

あなたの説明に基づいて、次の設定で1つが呼び出されProjects、もう1つが呼び出される2つのテーブルを作成しました。ErrorCodes

Projects                          HDR_ErrCodes
ProjectID    ProjectCode(text)    Error_Reason_Code(text)    project_ID(integer)
1            FI-01-05             Failure                    1
2            FI-01-01             Testing                    1
3            SY-02-02             Manual                     1
4            SY-01-01             Failure                    2
5            SY-01-02

上記の設定と on change イベントにより、コンボ ボックス cboErrCod1 に正しいエラー コードが入力されます。その設定に何か問題がありますか?

于 2013-05-21T20:20:59.163 に答える