アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルの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もテキスト
ですから、一致しているのでないでしょうか?
なぜなんでしょう?

参考書とかネットとか見様見真似でやってるので、ものすごく変な部分が
あるのかもしれませんが、どうかご教授願います。

A 回答 (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件も該当データが無い場合の例外処理が必要だと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。出来ました。
" とか ' とかいろいろ厄介ですね。
ちょっと違っただけで正常に機能しないし…。

本当に勉強になりました。
1件も該当が無い場合の例外処理は何とかなりそうです。

ありがとうございました。

お礼日時:2006/11/23 16:27

こんにちは。

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で繋げてみたけど駄目でしたし・・・。

どうかご教授願います。

補足日時:2006/11/23 15:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!