- ベストアンサー
vb2010でmdbデータの任意の項目で検索
- VB初心者でソフト開発をやり始めたのですが行き詰まって困っています。助けてください。
- ACCESSのmdb形式のデータは下記の構成になっています。1列:ID integer サイズ指定無し 自動設定 2列:名前 string サイズ指定無し 3列:性別 string サイズ指定無し 4列:電話番号 string サイズ指定無し テーブル名:sampleTable フォームにテキストボックスを項目数配置してIDを設定してボタンを押すと各テキストボックスに検索されたデータが帰ってきて表示されるものです。
- 下記のようなプログラムで「ID」を指定して検索が出来るのは確認済みです。これを「名前」を指定して検索出来るように改造したいのですがどのようにすれば良いのかお教え頂きたくお願いいたします。たぶん ”strSelectSql =・・・・・の部分かと思うのですがよろしくお願い致します。(色々試しましたがうまくいきません・・・。)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> where 名前= "+ MjstrSimei ではだめなのでしょうか? SQL実行前に、メッセージボックス等でSQLを表示するようにしてみてください。 その書き方では、望むSQLが発行されていないことがわかります。 "where 名前= " + MjstrSimei → where 名前= 太郎 "where 名前= '" + MstrSimei + "'" → where 名前= '太郎'
その他の回答 (2)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
フィールドのデータ型が理解できていないようです。 「ID」フィールドは数値型、「名前」「性別」「電話番号」フィールドは文字列型です。 SQL文で文字列型の条件を記述する場合は、シングルコーテーションで囲む必要があります。 以下の手順で、必要なSQL文の検索条件部分を構築出来ます。 条件を入力するテキストボックスの名称を「ID条件」「名前条件」「性別条件」「電話条件」とする。 Where条件の文字列を、strWhere とする。 ・strWhere を空にする。 ・もしID条件が空でなければ ・□□strWhereの追加前処理() ・□□strWhereに、"(ID="+ID条件+")"を追加する。 ・もし名前条件が空でなければ ・□□strWhereの追加前処理() ・□□strWhereに、"(名前='"+名前条件+"')"を追加する。 ・もし性別条件が空でなければ ・□□strWhereの追加前処理() ・□□strWhereに、"(性別='"+性別条件+"')"を追加する。 ・もし電話条件が空でなければ ・□□strWhereの追加前処理() ・□□strWhereに、"(電話番号='"+電話条件+"')"を追加する。 ・もしstrWhereが空でなければ ・□□SQL文に、" WHERE "+strWhere を追加する。 ここで、strWhereの追加前処理()とは、2つ目以降の条件を追加する場合の前処理です。 ・もしstrWhereが空でなければ、strWhereに" AND "を追加する。
お礼
3人目の方の短刀直入・単純明快な回答でやっと出来ました。その上で、貴殿の内容が初めて理解でき情報の豊富さに感動、ありがとうございました。頂いた情報は多いので今後の開発に役立てたいと思います。今後ともよろしくお願い致します。
- Picosoft
- ベストアンサー率70% (274/391)
いきなりプログラムで考えるのではなく、「どういったSQLを生成したいか」をまず考えましょう。 IDが「1」のレコードを検索する場合は Select * from sampleTable where ID = 1 です。 では、名前が「太郎」のレコードを検索する場合はどうなるでしょうか? Select * from sampleTable where 名前 = 太郎 ではなく、 Select * from sampleTable where 名前 = '太郎' とすべきなのは理解しておられますか?
補足
おっしゃることは理解しているつもりです。 ”ID”、”名前”共に MDB の項目名です。 "ID" も "名前" もフォームのTEXTBOXから参照してデータを入れる構造にしています。 ’where 名前= "+ MjstrSimei ではだめなのでしょうか?
お礼
出来ました!、本当にありがとうございました。 信じられない! 3日間調べ回ったのに解決策を探せ出せなかったことが・・・・。 この結果を基に文字列と数値の扱いをきっちり整理して認識を高めたいと思います。 簡潔明瞭な回答ほんとにありがとうございました。