超初心者ですがおねがいします。
VB5.0でACCESSのデータを扱っています。
フォーム上に置いたテキストボックス「text1」「text2」「text3」が3つあり、「text1」にIDを入力するとACCESSからデータを取得して「text2」「text3」にデータを表示させたいのですが、
ACCESSのデザインはこんな感じです。
テーブル:【顧客TBL】
--------------------------------------------
フィールド名 データ型 サイズ
--------------------------------------------
ID テキスト型 (主キー) 変更後→数値型 (整数型)
氏名 テキスト型 20文字
住所 テキスト型 50文字
-----------------------------------------------
コードはこんな感じです。
’****************************************
Private Sub Text1_Change()
Dim mdb As DAO.Database
Dim mrs As DAO.Recordset
Dim SQL As String
Dim x As String 変更後→Dim x As integer
x = Text1.Text
'データベースをオープン
Set mdb = OpenDatabase("顧客契約2.mdb")
'選択クエリーを取得
SQL = "select * from 顧客TBL where ID = '" & x & "' "
'条件に一致するレコードを取得
Set mrs = mdb.OpenRecordset(SQL, dbOpenDynaset) ←ここでエラー発生。
mrs=Nothingになる
Text2.Text = mrs.Fields("顧客氏名")
Text3.Text = mrs.Fields("住所")
'オブジェクトを閉じる
mrs.Close
mdb.Close
'オブジェクトを解放
Set mrs = Nothing
Set mdb = Nothing
End Sub
’*******************************************************
IDのデータ型がテキスト型のときはうまく表示されたのですが、IDのデータ型がテキスト型だと並び替えをした時、IDが1〜11番まであると1の次に10と11がきてしまうので・・・
・IDのデータ型を数値型(整数型)の主キーにして
・コードもDim x As Strings →Dim x As integer
にしましたところ、すると
Set mrs = mdb.OpenRecordset(SQL, dbOpenDynaset)で「抽出条件でデータ型が一致しません。」のエラーが発生します。
色々試してみたのですが原因がわかりません。
どなたかわかる方力を貸してください!!
単純に、
> where ID = '" & x & "' "
「数値なのに、文字の様に『''』で括っている」からでは?
大吉末吉様
ありがとうございます。
""をとったところできなかったのですが、
シングルコーテーションだけをとってみて
where ID = " & x & " "にしたところ表示することができました!
何故かわかりませんが・・・
ありがとうございました!!
ありがとうございました!
解決したようですがご参考までに
"select * from 顧客TBL where ID = '" & x & "' "
からダブルクォーテーション「"」と文字列連結演算子「&」を取っ払うと
select * from 顧客TBL where ID = 'x'
となります
ACCESSではシングルクォーテーションで囲まれると文字列として認識されてしまうので、これだと数値型のIDに変数ではなくただの文字'x'を放り込もうとすることになるためエラーが発生します
というわけでシングルクォーテーションを取っ払うと解決したんです
かさのば様
解説ありがとうございます!
ほんとに勉強になります。
ツイート | ![]() |