こんにちは。
タイトルの通りなのですが、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で質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) FileSearch2007に変わる構文について 1 2022/12/16 16:57
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
order by での変数使用について。
-
Pro*Cの構文エラー
-
INSERT,DELETEを同時に
-
phpのupdate,sql文にて連番カラ...
-
phpでMySQLのデータベースにア...
-
VBA ACCESS SQL...
-
コードで渡したデータを降順に...
-
VBAについて質問です
-
PEARを使ったフェッチのしかた。
-
VBAをつかってクエリの情報を抽...
-
特定のフィールドが更新された...
-
PHP 10件表示 "前へ" "次へ"
-
実行時エラー3131 FROM 句の構...
-
PHPで[]の使い方について
-
mysql>PHPにデータ表示、10件ご...
-
MySQLでshal()関数のエラーがで...
-
ヒアドキュメントについて
-
テーブルに入っているデータと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
ResultSetインターフェイスでの...
-
<VB.NET>INSERT文でDBにデータ...
-
Pro*Cの構文エラー
-
insert1つの処理でもトランザ...
-
データベースに存在するデータ...
-
VBA ACCESS SQL...
-
INSERT,DELETEを同時に
-
MySQLのINSERT時にたまに重複に...
-
VB.NET エラーになる箇...
-
PHP&MySQLでの文字列+数列の一...
-
PHP初心者です。syntax error, ...
-
like検索の複数キーワードで、...
-
php MySQL で、更新ボタンを押...
-
php postgres Insert と updat...
-
チェックボックスからの複数検...
-
php データベースから値を取得する
-
ASPでSQL文を使う場合に。
-
phpでforeach ($stmt as $row)...
-
Q&Aサイトを作成していてURLの...
おすすめ情報