0

MS Access フォームのフィールドに自動的に入力する方法はありますか? ユーザーがフォームの特定のコンボ ボックスから選択したとしましょう。PK に基づいてフォームの他のフィールドを自動的に選択するためにできることはありますか?

自動入力するフィールドがさまざまなテーブルから取得されることを追加したいと思います..

***修正

コンボ ボックスで特定のレコードを選択したら、複数の値を返す必要があります。誰か助けてくれませんか?複数の値は、次のような値を返すクエリから取得されます。

ID          Code             Count
24          TST                4  
24          BPB                7
24          SSS                10  

フォームでは、コンボ ボックスは ID 番号を選択します。24 の ID 番号を選択したら、Project_Error_Final というクエリから取得した上記の 3 つのレコードをすべて返したいと思います (この例では、返す値が 3 つありますが、ID = 24 のレコードをクエリで返す必要があります)。私がこれまでに持っているVBAコードは次のとおりです。

Private Sub cboProjectID_Change()

Dim VarComboKey As Integer
Dim VarObjective As Variant
Dim VarStartDate As Variant
Dim VarEndDate As Variant
Dim VarRiskCategory As Variant
Dim VarTarDatSet As Variant

Dim VarErrorCount As Variant
Dim VarErrorCode As Variant

VarComboKey = Me.cboProjectID.Value

VarObjective = DLookup("[Objective]", "[Project_HDR_T]", "[Project_ID] = " & VarComboKey)
Me.txtObjective = VarObjective

VarStartDate = DLookup("[Start_Date]", "[Project_HDR_T]", "[Project_ID] = " & VarComboKey)
Me.txtStartDate = VarStartDate

VarEndDate = DLookup("[End_Date]", "[Project_HDR_T]", "[Project_ID] = " & VarComboKey)
Me.txtEndDate = VarEndDate

VarRiskCategory = DLookup("[Risk_Category]", "[Project_HDR_T]", "[Project_ID] = " & VarComboKey)
Me.txtRiskCategory = VarRiskCategory

VartxtTarDatSet = DLookup("[Targeted_Dataset]", "[Project_Targeted_Dataset]", "[Project_ID] = " & VarComboKey)
Me.txtTarDatSet = VartxtTarDatSet

VarErrorCount = DLookup("[Count_Error_Codes]", "[Project_Error_Final]", "[project_ID] = " & VarComboKey)
Me.txtErrorCount = VarErrorCount

VarErrorCode = DLookup("[ErrorCode]", "[Project_Error_Final]", "[project_ID] = " & VarComboKey)
Me.txtErrorCode = VarErrorCode

End Sub  

問題の値は、VarErrorCount と VarErrorCode です。上記の VBA コードでは、1 つの値のみが返されます。しかし、ID コンボ ボックス フィールドが選択されると、複数の VarErrorCount および VarErrorCode 値がフォームに返されることを探しています。この特定の例では、VarErrorCode は「TST」、「BPB」、および「SSS」を返す必要があります。VarErrorCount は、対応する VarErrorCode 値「4」、「7」、「10」を返す必要があります。

4

2 に答える 2

1

複数の返品に関しては、を使用することはできませんがDLookup、説明に従って、希望する結果を達成する方法を説明します。

この特定の例では、VarErrorCodeは「TST」、「BPB」、および「SSS」を返す必要があります。VarErrorCountは、対応するVarErrorCode値を返す必要があります: "4"、 "7"、 "10"

上記の最後の4行End Subを次のように変更します。

Dim dbs as DAO.Database
Dim rst1 as DAO.Recordset
Dim rst2 as DAO.Recordset

Set dbs = CurrentDb
Set rst1 = dbs.OpenRecordset("SELECT [Count_Error_Codes] FROM [Project_Error_Final] WHERE [project_ID] = " & VarComboKey)
If rst1.RecordCount > 0 Then
    rst1.MoveFirst
    Do Until rst1.EOF
        VarErrorCount = VarErrorCount & rst1!Count_Error_Codes & ","
        rst1.MoveNext
    Loop
    ' Remove the last comma
    VarErrorCount = Mid(VarErrorCount, 1, Len(VarErrorCount) - 1)
End If

Set rst2 = dbs.OpenRecordset("SELECT [ErrorCode] FROM [Project_Error_Final] WHERE [project_ID] = " & VarComboKey)
If rst2.RecordCount > 0 Then
    rst2.MoveFirst
    Do Until rst2.EOF
        VarErrorCode = VarErrorCode & rst2!ErrorCode & ","
        rst2.MoveNext
    Loop
    ' Remove the last comma
    VarErrorCode = Mid(VarErrorCode, 1, Len(VarErrorCode) - 1)
End If

rst1.Close
Set rst1 = Nothing

rst2.Close
Set rst2 = Nothing

dbs.Close
Set dbs = Nothing

Me.txtErrorCount = VarErrorCount
Me.txtErrorCode = VarErrorCode
于 2013-03-15T15:01:56.527 に答える
1

はいあります!

明らかに、コンボ ボックスの選択を、他のフィールドに入力したい値に関連付けることができる必要があります。PK と 1 対 1 の関係があると仮定すると (フォームに 1 つの値のみを表示するため)、AfterUpdate イベントと DLookup() 関数を使用して、PK を使用して関連する値を取得できます。

簡単な例として、Foods という名前のテーブルを次のように設定します。

FoodID、FoodName、FoodCategory

1、オレンジ、フルーツ

2、鶏肉、鶏肉

3、アーモンド、ナッツ

4、レタス、野菜

フォームには、FoodID を ComboFoods という名前の PK バインド値として選択するコントロールと、Foods テーブルから FoodCategory を入力する TextFoodCategory という名前のバインドされていないテキスト ボックス コントロールがあります。

コンボ ボックスの AfterUpdate イベントに次のコードを割り当てて、コンボ ボックスの値が変更されたときにテキスト ボックスにデータが入力されるようにしました。

プライベート サブ ComboFoods_AfterUpdate()

'コンボボックスの主キー選択を格納する変数を作成

Dim VarComboKey​​ を整数として

'DLookup の結果を格納する変数を作成します

Dim VarFoodCat をバリアントとして

'コンボボックスの主キーを取得

VarComboKey​​ = Me.ComboFoods.Value

'関連するフィールド値を取得

VarFoodCat = DLookup("[FoodCategory]", "[Foods]", "[FoodID] = " & VarComboKey​​)

'テキストボックスの値を変数にセット

Me.TextFoodCategory.Value = VarFoodCat

これは、PK に関連する FoodCategory を返します。これはすべて 1 つのテーブルを使用していますが、DLookup ステートメントを変更して、PK を含む任意のクエリまたはテーブルを参照できます。

DLookup は、参照しているデータ内で PK が一意である場合にのみ適切に機能することに注意してください。結果を 1 つのレコードに制限する他の条件を指定しない限り、1 対多の関係では機能しません。複数のレコードを返す必要がある場合、VBA 内で SQL クエリとレコードセットを使用する方法は他にもありますが、これはこの質問の範囲外です。

これはテスト時に機能しました-幸運を祈ります!

于 2013-03-11T16:59:30.110 に答える