エクセルのVBAでユーザーフォームから、アクセスのデータを取得して
ユーザーフォームのテキストボックス、コンボボックスに取得させたデータ
を表示させようとしています。
TextBox1に顧客IDを0001234のように7桁の数字を入力すると、アクセスの
「T_メイン」テーブルからIDが一致するレコードを取得して、フィールド「クライアント名」、
フィールド「営業所」、フィールド「担当者」のデータをテキストボックスや
コンボボックスに表示させたいのです。
それで、以下のようなコードを記入しました。
Private Sub TextBox1_Change()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SelCmd As String
If Len(TextBox1.Value) = 7 Then
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;" _
& "Data Source=D:\管理表.mdb"
cn.Open
SelCmd = "SELECT * FROM T_メイン " _
& "WHERE 顧客ID = " & TextBox1.text
Set rs = New ADODB.Recordset
rs.Open SelCmd, cn, adOpenKeyset, adLockOptimistic
TextBox2.Value = rs!クライアント名
ComboBox2.Value = rs!営業所
ComboBox3.Value = rs!担当者
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End If
End Sub
しかし、これを実行させると、
rs.Open SelCmd, cn, adOpenKeyset, adLockOptimistic
の部分でエラーがでてしまいます。
「抽出条件でデータ型が一致しません」のエラーメッセージです。
アクセス側の顧客IDの部分はテキスト型ですし、TextBoxもテキスト
ですから、一致しているのでないでしょうか?
なぜなんでしょう?
参考書とかネットとか見様見真似でやってるので、ものすごく変な部分が
あるのかもしれませんが、どうかご教授願います。
No.2ベストアンサー
- 回答日時:
私の書き方ですが...
Dim Sql As String
Sql = ""
Sql = Sql & "SELECT *"
Sql = Sql & " FROM T_メイン"
Sql = Sql & " WHERE (顧客ID = '" & TextBox1.Text & "') AND (契約 = '契約中')"
Sql = Sql & ";"
Debug.Print Sql
この SQL を渡せば良いと思います。Access 等で確かめてないのですけど。
余談ですが、1件も該当データが無い場合の例外処理が必要だと思います。
ありがとうございます。出来ました。
" とか ' とかいろいろ厄介ですね。
ちょっと違っただけで正常に機能しないし…。
本当に勉強になりました。
1件も該当が無い場合の例外処理は何とかなりそうです。
ありがとうございました。
No.1
- 回答日時:
こんにちは。
KenKen_SP です。よく見てないけど、WHERE 句にテキストを渡すときは、シングルクウォートが必要だと思います。
これでどうでしょう?
> SelCmd = "SELECT * FROM T_メイン " _
> & "WHERE 顧客ID = " & TextBox1.text
↓
SelCmd = "SELECT * FROM T_メイン " _
& "WHERE 顧客ID = '" & TextBox1.Text & "';"
この回答への補足
早速の回答ありがとうございます。
ご指摘の通りで出来ました。ありがとうございます。
追加で以下の事もご教授いただけますでしょうか?
抽出条件を2つにしたしたいのです。
SelCmd = "SELECT * FROM T_メイン " _
& "WHERE 顧客ID = " & TextBox1.text
の部分を「顧客ID」のフィールドがTextBox1と一致して、なおかつ
「契約」のフィールドが"契約中"になっているもののデータを
取得できるようにしたいのです。
どのように書けばいいのでしょうか?
ANDで繋げてみたけど駄目でしたし・・・。
どうかご教授願います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データ型が一致しない?
-
エクセルで「3次元配列」表の...
-
エクセルVBA テキストボックス検索
-
VBA リストボックス反映できない
-
読み取ったQRコード/バーコード...
-
国内線航空券をJALのアプリにて...
-
バーコードってダブらない?
-
バーコードコントロールが印刷...
-
ANAの2次元バーコードがスマホ...
-
レシートにバーコード
-
Excelでバーコードリーダーで読...
-
黒い無地のバーコードのみのカ...
-
EXCELでバーコードを作成すると...
-
ガラケー携帯(カメラ付き)で...
-
コンビニバイトで商品バーコー...
-
ライフカードの支払いについて...
-
4進数風なバーコードは何ですか?
-
コンビニ決済の用紙で支払いの...
-
PAYDAYのバーコード支払いって...
-
QRコードとバーコードについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで「3次元配列」表の...
-
<新設税理士事務所です>ミロ...
-
顧客CDのCDって?
-
VBA。リストボックスの値を別の...
-
エクセルで並び替えするとハイ...
-
エクセルの数式で教えてください。
-
エクセルVBA テキストボックス検索
-
VBA リストボックス反映できない
-
EXCELシート内の数字での並び替...
-
エクセルで顧客の継続率
-
対象月の2桁表示について
-
Excel 指定した固有番号で、複...
-
アクセスでのデータ抽出方法
-
エクセルでのデータ作成(数値...
-
顧客名簿管理、郵便振込取扱票...
-
エクセルでのデータ拾い
-
【ExcelVBA】顧客別に抽出デー...
-
エクセルデータ。容量を減らす...
-
お客さんの来店間隔が知りたい...
-
Excelの集計をWordで差し込み印...
おすすめ情報