- ベストアンサー
テキストボックスにクエリ結果を表示させたい
フォームにテキストボックスAがあり、そこに入力した文字(下記テーブルのフィールド1の文字)をクエリーの「抽出条件」にし、同じフォーム上のテキストボックスBに表示しようと思っています。 クエリを開くとパラメータの入力を求めてきて、入力するとうまく抽出されます。 テーブルは フィールド1|フィールド2 A | 10 B | 20 C | 30 D | 40 のような簡単なものです。 テキストボックスBのコントロールソースに 「=[○×クエリ]![フィールド2]とやっても「#Name?」と表示されてしまいます。 どのようにやればよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
クエリは必要ありません。 フォームのレコードソースに無いデータを表示させる 場合には DLookUp を使います。 テキストボックスBのコントロールソースに =DLookUp("フィールド2","テーブル名","フィールド1='" & [テキストボックスA]) & "'" 上記は「フィールド1」が文字列型の場合です。 数値型の場合は次のようになります。 =DLookUp("フィールド2","テーブル名","フィールド1=" & [テキストボックスA]) DLookUp 関数は コントロールソースに限らず VBA でも使用し、Access では、非常に使用頻度の高いものです。 ヘルプで調べて、ぜひマスターしてください。 もし Access でなかったら、このレスは無視して下さい。
その他の回答 (1)
No1さんの回答が基本。 実行速度を重視するならばADODB を利用する次のステップへ。 =DBLookUp("フィールド2","テーブル名","フィールド1='" & [テキストボックスA] & "'") Public Function DBLookup(ByVal strField As String, _ ByVal strTable As String, _ Optional ByVal strWhere As String = "", _ Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim strQuerySQL As String Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset strQuerySQL = "SELECT " & strField & " FROM " & strTable If Len(strWhere) > 0 Then strQuerySQL = strQuerySQL & " WHERE " & strWhere End If With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = Nz(DataValue, ReturnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function
お礼
s_husky様 解答有り難うございます。 まだaccessを始めたばかりなのでモジュール関連はもう少し勉強してから使用したいと思います。 そのときには参考にさせて貰います。 今回は有り難うございました。
お礼
bonaron様 解答有り難うございます。 DLookUp関数の関数のことは知りませんでした。 これからもよく使用していくことになりそうなのでマスターしようと思います。 ありがとうございました。