![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんにちは。
タイトルの通りなのですが、VB.NETでSQL文を作りたいのですが、カンマの対処について分からなかったので質問させて頂きました。
例えば、下記のようなテーブルとwindowsアプリケーションフォームがあったとします。
itemテーブル フォーム(□はチェックボックスだと思ってください。)
item_id item_cd item_name □ りんご
--------------------------------- □ ばなな
0001 0001 りんご □ みかん
0002 0002 ばなな □ めろん
0003 0003 みかん
0004 0004 めろん
このフォームで、チェックボックスに印が付いているものを、SQL文の条件に加えたいと思っていますが、なかなか上手く書けません。
現在のソース
sql="SELECT item_id,item_cd,item_name " _
& "FROM item " _
& "WHERE item_name IN ("
If apple.checked = True Then
sql &= "'" & label1.text & "',"
End If
If banana.checked = True Then
sql &= "'" & label2.text & "',"
End If
・
・
・
このやり方だと、sql文の最後にカンマが残ってしまいます。
ですが、前カンマをやったところで構文的におかしくなってしまいます。
このようなとき、どのように対処すればよいのでしょうか?
よろしければ、教えてください。
No.1ベストアンサー
- 回答日時:
dim needComma as boolean = false
If apple.checked = True Then
if needComma then
sql &= ","
end if
sql &= "'" & label1.text & "'"
needComma = true
End If
If banana.checked = True Then
if needComma then
sql &= ","
end if
sql &= "'" & label2.text & "'"
needComma = true
End If
泥臭く作るとこんな具合ですかね。
皆様、大変参考になる意見ありがとうございました。
自分では結構考えたつもりだったのに、こんなにたくさんの対処法があることにビックリしました。
もっと勉強したいと思います。
No.5
- 回答日時:
既にいろいろ書かれてますが、他にも例えば…
Dim tmpIN As String = ""
If apple.Checked Then
tmpIN &= IIf(tmpIN = "", "", ",").ToString & label1.Text
End If
If banana.Checked Then
tmpIN &= IIf(tmpIN = "", "", ",").ToString & label2.Text
End If
:
:
sql = sql & tmpIN & ")"
とか。
わざわざToStringを使ってるのは、Option Strict Onだと、IIf関数の
戻り値がObject型(のはず)なのでエラーになるからです。
関数とか使って綺麗に組めば、もうちょっとスッキリさせられるかもですが、
とりあえず、この程度で。
余談:
もしかして、CheckBox右の文字を表示するために、わざわざLabel使ってたりします?
CheckBox.Textで十分だと思うのですが…
皆様、大変参考になる意見ありがとうございました。
自分では結構考えたつもりだったのに、こんなにたくさんの対処法があることにビックリしました。
もっと勉強したいと思います。
No.4
- 回答日時:
redfox63さんと提案内容は同じですが、VB2005で同じようなことを
自分がやっていますので一例としてどうぞ。
List(Of T)クラスを使った手法です。
-------------------------------------------------
Dim whereList as New List(Of String)
Dim sql As String
sql = "select name from members "
whereList.Add("group_name='" & label1.Text & "'")
whereList.Add("class_name='" & label2.Text & "'")
sql &= "where " & String.Join(",",List.ToArray)
Debug.Print(sql)
--------------------------------------------------
皆様、大変参考になる意見ありがとうございました。
自分では結構考えたつもりだったのに、こんなにたくさんの対処法があることにビックリしました。
もっと勉強したいと思います。
No.3
- 回答日時:
ArrayListと String.Jonをつかって簡素化してみてはいかがでしょう
dim ar as New ArrayList()
dim ss as string
ar = AddRange(New String() {"りんご", "ばなな", "みかん", "めろん"})
' フォームのControlsコレクションを検査
for each ctl as Contol in Controls
if typeof ctl is CheckBox then
' CheckBoxでチェックが無い場合
if CType(ctl,CheckBox).Checked=False then
dim n as Integer = ar.IndexOf( ctl.Text )
' arにアイテムが登録されているならば削除
if n > -1 then ar.RemoveAt(n)
end if
end if
next
if ar.Length > 0 then
' アイテムが残っているなら ',' でアイテム同士をつなぐ
ss = String.Format( " WHERE IN ( '{0}' )", _
String.Join( "','", ar.ToArray( GetType( String ) ) ) )
end if
といった具合です
皆様、大変参考になる意見ありがとうございました。
自分では結構考えたつもりだったのに、こんなにたくさんの対処法があることにビックリしました。
もっと勉強したいと思います。
No.2
- 回答日時:
SQL文の前で、ローカル変数で、IN句に含まれる文字列を
つくり込んでおき、SQL文では、ローカル変数を参照するように
すれば、いかがですか?
もちろん、ローカル変数の最後のカンマは、削除しておくこと。
dim kwd as string
'kwd設定処理
kwd=left(kwd,len(kwd)-1) '最後のカンマを削除
こんなふうにね。
皆様、大変参考になる意見ありがとうございました。
自分では結構考えたつもりだったのに、こんなにたくさんの対処法があることにビックリしました。
もっと勉強したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
spl拡張子保存
-
MYSQL UPDATE
-
JAVA SQLServerException 列名 ...
-
VB.NET エラーになる箇...
-
SQLインジェクション対策
-
実行時エラー3131 FROM 句の構...
-
MySQLでデータベースにデータin...
-
データ削除のスクリプト
-
PHP+MYSQLでレコードの表示させ方
-
テキストボックスに入れた内容...
-
codeigniter 複数モデルでトラ...
-
VBAをつかってクエリの情報を抽...
-
SELECT文を発行して、ACCESSよ...
-
csvファイルのデータをSQLiteに...
-
日またぎの計算
-
PHPで[]の使い方について
-
PHP 10件表示 "前へ" "次へ"
-
mysql_fetch_array の速度について
-
SQLで返り値が空とでる
-
in 'where clause'のエラーの理由
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
insert1つの処理でもトランザ...
-
ResultSetインターフェイスでの...
-
Pro*Cの構文エラー
-
VBA ACCESS SQL...
-
データベースに存在するデータ...
-
INSERT,DELETEを同時に
-
PHP&MySQLでの文字列+数列の一...
-
mysqliを使ってデータベースを...
-
条件が合わなかった場合の処理...
-
OR検索を実装したい
-
phpmyadminにタグを格納するには
-
phpで複数の検索語を検索対象に...
-
MySQLのINSERT時にたまに重複に...
-
order by での変数使用について。
-
PHP初心者です。syntax error, ...
-
Q&Aサイトを作成していてURLの...
-
php postgres Insert と updat...
-
VB.NET エラーになる箇...
おすすめ情報