- - PR -
CheckedListBoxの値をSQLへ
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-07-27 09:10
さかもと と申します
いつもいつも参考にさせていただいております。 ListBoxおよび、CheckedListBoxで色々と検索させて頂きましたが、 不明なところがありまして質問させて頂きました。 以下の動作を行いたいと思っています。 ==================================================== @ChekedListBoxで選択されたコードを取得 その際、選択は1〜7つまでの間とする A1〜7つ選択されたコードを元にマスタからSELECTしてくる (条件は1〜7つの間で増減します) ==================================================== @に関しては過去ログを参考にさせて頂き Dim strItem As String Dim i As Integer For i = 0 To ClstSikiCd.CheckedItems.Count - 1 strItem = strItem & Strings.Left(ClstSikiCd.CheckedItems(i), 4) _ & ControlChars.CrLf Next i Console.WriteLine(strItem) If ClstSikiCd.CheckedItems.Count > 7 Then ErrorProvider1.SetError(ClstSikiCd,"選択行数は7以下にしてください") End If とし、なんとか選択されたものだけコードを取得することができました。(ありがとうございました) 問題は、上記で取得したstrItemをどのように1〜7つまでの変数(SQLへ渡す為のパラメーター?)として設定するのか、ということと条件が1〜7つまで増減する条件をどのように SQL文に渡せばいいのか・・・?という2点です。 SELECT * FROM CustomerM WHERE (チェックされているコード以外) というこれだけのはずだったのですが・・・。 ご存知の方がいらっしゃいましたらご教授頂けたらと思います。 宜しくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2004-07-27 09:49
in句を使います。 SELECT * FROM CustomerM WHERE [列名] not in ([値1],[値2],[値3],・・・) ()内はカンマ区切りで好きな数だけ入れれるので、1つでも7つでもOKです。 (さすがに0個はまずいですが) | ||||||||||||||||
|
投稿日時: 2004-07-27 10:01
Cluster 様
ご返答ありがとうございます。 以下Cluster様ご回答 ============================================================ in句を使います。 SELECT * FROM CustomerM WHERE [列名] not in ([値1],[値2],[値3],・・・) ()内はカンマ区切りで好きな数だけ入れれるので、1つでも7つでもOKです。 (さすがに0個はまずいですが) ============================================================ そうなんですよね、そこまでは問題ないのですがこの文に渡す[値n]の取得 が問題でして。0個のときは条件を作成してWHERE句を&で連結させるか どうかで対応できるかと思うのですが・・・。なかなか良い知恵が・・・(笑) どのように取得するのか・・・。悩みます。 | ||||||||||||||||
|
投稿日時: 2004-07-27 10:08
Cluster 様
ご返答ありがとうございます。 以下Cluster様ご回答 ============================================================ in句を使います。 SELECT * FROM CustomerM WHERE [列名] not in ([値1],[値2],[値3],・・・) ()内はカンマ区切りで好きな数だけ入れれるので、1つでも7つでもOKです。 (さすがに0個はまずいですが) ============================================================ そうなんですよね、そこまでは問題ないのですがこの文に渡す[値n]の取得 が問題でして。0個のときは条件を作成してWHERE句を&で連結させるか どうかで対応できるかと思うのですが・・・。なかなか良い知恵が・・・(笑) どのように取得するのか・・・。悩みます。 | ||||||||||||||||
|
投稿日時: 2004-07-27 11:13
私はVB.netは疎いので正確なソースは書けませんが、
ここを少し変更して
とした上で、最後にstrItemの末尾1文字を削って(左から、[strItemの文字数-1]だけ取って)、
でSQL文を文字列として生成すればいいのでは? | ||||||||||||||||
|
投稿日時: 2004-07-27 11:47
Cluster様
ご返答ありがとう御座います。 なるほど、そういうことでしたか! 変数になんとか値を代入する・・・、ということに囚われていました。 早速教えていただきました方法を試してみます。 またご報告させて頂きます。 取り急ぎお礼まで。 | ||||||||||||||||
|
投稿日時: 2004-07-27 13:09
Cluster様
先ほどご返答頂いた件で以下のようにし解決しましたのでご報告 させて頂きます。 ============================================================ '/ CheckedListBoxの値を取得する為の宣言 Dim strItem As String Dim strLen As String Dim strSiki As String Dim i As Integer '/リストボックスの中でチェックされているものを全てstrItemに格納 For i = 0 To ClstSikiCd.CheckedItems.Count - 1 strItem = strItem & Strings.Left(ClstSikiCd.CheckedItems(i), 4) & "'" & "," & "'" Next i '/選択行数を7行までとする If ClstSikiCd.CheckedItems.Count > 7 Then ErrorProvider1.SetError(ClstSikiCd, "選択行数は7以下にしてください") End If '/リストボックスより取得した値をSQL文で使用できるように整形する If strItem <> Nothing Then strLen = strItem.Length - 2 strSiki = "'" & Strings.Left(strItem, strLen) End If 〜〜〜〜〜略〜〜〜〜〜 '/値が有る場合はSQL文末に式を追加する I If strSiki <> Nothing Then fs &= " AND SikiCd NOT IN (" & strSiki & ")" End If ============================================================================== 以上のようにして実現できました。 きっと簡単なことだったんでしょうね・・・(笑) このようなことがススッっと出来るように精進いたします。 本当にありがとうございました。 |
1