VB.NETとDB連携について質問です

VB.NETとDB連携について質問です VB.NETとDB(オラクル)を使って開発をしています。 画像の左側のテキストボックスは上から textbox1(Nameプロパティ:txt_Name) textbox2(Nameプロパティ:txt_Tihou) textbox3(Nameプロパティ:txt_Category) としています SQL文で textbox1~textbox3の内容が入っている項目だけWHERE句で抽出させたいです たとえば画像の例で、 textbox1に「みかん」、textbox3に「果物」と入れているとき、 赤の四角で囲った2行をdatagridviewとかに表示しようとおもっています 実際のコード(変数等は中略しています) 'textbox1、textbox2、textbox3が空白でない if textbox1.text <> "" And textbox2.text <> "" And textbox3.text <> "" SQL = "select * from ["表名"] where 名前 = " & textbox1.text & _ " and 地方 = " &textbox2.text & " and カテゴリ = " & textbox3.text" end if 'textbox1が空白でない if textbox1.text <> "" And textbox2.text = "" And textbox3.text = "" SQL = "select * from ["表名"] where 名前 = " & textbox1.text & " end if ・ ・ ・ ・ ・・・という感じで全ての組み合わせ(10通りくらい)でIF文を書いています この例では3つなのでまだいいかもしれませんが、 テキストボックスが10個とか100個とかになったらどのように判断したらいいのか分からないです 何か効率いい方法、知っている方いましたら教えてください

画像

Visual Basic393閲覧

ベストアンサー

0

こんな感じでは? Dim Sql As String = "select * from [表名] where true" If TextBox1.Text <> "" Then Sql += " and ([名前] = '" & TextBox1.Text & "')" If TextBox2.Text <> "" Then Sql += " and ([地方] = '" & TextBox2.Text & "')" If TextBox3.Text <> "" Then Sql += " and ([カテゴリ] = '" & TextBox3.Text & "')" ちなみに ["表名"]の"は不要だと思います。 [名前][地方][カテゴリ]が文字列の場合は’で囲む必要があると思います。 [ 追加 ] ちなみに10個くらいなら並べた方が楽だしわかりやすいけれど、100個を超える場合はそのテーブルテーアウトを再考した方がいいと思います。 [ 追加の追加 ] 100個あったらループすればいいのか。 そうだね。 [ さらに追加 ] Dim kwd() As String = {"名前", "地方", "カテゴリ"} Dim Sql As String = "select * from [表名] where true" For i As Integer = 1 To 3 With Controls("TextBox" + i.ToString) If .Text <> "" Then Sql += " and ([" + kwd(i - 1) + "] = '" & .Text & "')" End If End With Next

ThanksImg質問者からのお礼コメント

ありがとうございます、教えていただいたコードで完成できました

お礼日時:2012/10/24 20:58

その他の回答(2件)

0

一例ですが、テキストボックスのTagプロパティに列名を設定しておく方法です。 Dim SQL As String Dim SQLWHERE() As String For Each c As Control In Me.Controls If TypeOf c Is TextBox Then If Not c.Tag = "" Then If Not c.Text = "" Then If SQLWHERE Is Nothing Then ReDim SQLWHERE(0) Else ReDim Preserve SQLWHERE(UBound(SQLWHERE) + 1) End If SQLWHERE(UBound(SQLWHERE)) = c.Tag & " = " & c.Text End If End If End If Next SQL = "select * from 表名 where " & Join(SQLWHERE, " And ") MsgBox(SQL) 自分だったらblue_arlequinさんの回答のようにテキストボックスの値に応じてwhere文を作っていくやりかたをします。 列の型の問題や必ずしも比較条件が=だけとは限らないので。

0

自分だったら、100個もあるんだったらテキストボックスをコードでNewして配列にして、1が名前、2が地方、3がカテゴリ・・・というデータだけ用意しておいてForループで回すかな。