DAO;レコードセットの中から条件に一致するデータを抽出するには?

解決


たけあ  2007-02-13 19:39:17  No: 135278

超初心者ですがおねがいします。

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)で「抽出条件でデータ型が一致しません。」のエラーが発生します。
色々試してみたのですが原因がわかりません。
どなたかわかる方力を貸してください!!


大吉末吉  2007-02-13 19:43:57  No: 135279

単純に、

> where ID = '" & x & "' "

「数値なのに、文字の様に『''』で括っている」からでは?


たけあ  2007-02-13 22:15:46  No: 135280

大吉末吉様
ありがとうございます。
""をとったところできなかったのですが、
シングルコーテーションだけをとってみて
where ID = " & x & " "にしたところ表示することができました!
何故かわかりませんが・・・
ありがとうございました!!


たけあ  2007-02-13 22:50:50  No: 135281

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


かさのば  2007-02-14 07:19:33  No: 135282

解決したようですがご参考までに
"select * from 顧客TBL where ID = '" & x & "' "
からダブルクォーテーション「"」と文字列連結演算子「&」を取っ払うと
select * from 顧客TBL where ID = 'x'
となります
ACCESSではシングルクォーテーションで囲まれると文字列として認識されてしまうので、これだと数値型のIDに変数ではなくただの文字'x'を放り込もうとすることになるためエラーが発生します
というわけでシングルクォーテーションを取っ払うと解決したんです


たけあ  2007-02-14 23:11:46  No: 135283

かさのば様
解説ありがとうございます!
ほんとに勉強になります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加