@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

CheckedListBoxの値をSQLへ

1
投稿者投稿内容
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 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 (チェックされているコード以外) 

というこれだけのはずだったのですが・・・。

ご存知の方がいらっしゃいましたらご教授頂けたらと思います。
宜しくお願いいたします。
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-07-27 09:49
引用:

さかもとさんの書き込み (2004-07-27 09:10) より:

SELECT * FROM CustomerM WHERE (チェックされているコード以外) 

というこれだけのはずだったのですが・・・。




in句を使います。
SELECT * FROM CustomerM WHERE [列名] not in ([値1],[値2],[値3],・・・)
()内はカンマ区切りで好きな数だけ入れれるので、1つでも7つでもOKです。
(さすがに0個はまずいですが)
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 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/05/14
投稿数: 586
投稿日時: 2004-07-27 10:08
Cluster 様
ご返答ありがとうございます。

以下Cluster様ご回答
============================================================
in句を使います。
SELECT * FROM CustomerM WHERE [列名] not in ([値1],[値2],[値3],・・・)
()内はカンマ区切りで好きな数だけ入れれるので、1つでも7つでもOKです。
(さすがに0個はまずいですが)
============================================================

そうなんですよね、そこまでは問題ないのですがこの文に渡す[値n]の取得
が問題でして。0個のときは条件を作成してWHERE句を&で連結させるか
どうかで対応できるかと思うのですが・・・。なかなか良い知恵が・・・(笑)

どのように取得するのか・・・。悩みます。
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-07-27 11:13
引用:

さかもとさんの書き込み (2004-07-27 10:08) より:
以下Cluster様ご回答
============================================================
in句を使います。
SELECT * FROM CustomerM WHERE [列名] not in ([値1],[値2],[値3],・・・)
()内はカンマ区切りで好きな数だけ入れれるので、1つでも7つでもOKです。
(さすがに0個はまずいですが)
============================================================

そうなんですよね、そこまでは問題ないのですがこの文に渡す[値n]の取得
が問題でして。0個のときは条件を作成してWHERE句を&で連結させるか
どうかで対応できるかと思うのですが・・・。なかなか良い知恵が・・・(笑)



私はVB.netは疎いので正確なソースは書けませんが、

コード:
For i = 0 To ClstSikiCd.CheckedItems.Count - 1 
  strItem = strItem & Strings.Left(ClstSikiCd.CheckedItems(i), 4) _ 
           & ControlChars.CrLf 
Next i 


ここを少し変更して

コード:
For i = 0 To ClstSikiCd.CheckedItems.Count - 1 
  strItem = strItem & Strings.Left(ClstSikiCd.CheckedItems(i), 4) _ 
           & "," 
Next i 


とした上で、最後にstrItemの末尾1文字を削って(左から、[strItemの文字数-1]だけ取って)、

コード:
"SELECT * FROM CustomerM WHERE [列名] not in (" & strItem & ")"


でSQL文を文字列として生成すればいいのでは?
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-07-27 11:47
Cluster様

 ご返答ありがとう御座います。
なるほど、そういうことでしたか!
変数になんとか値を代入する・・・、ということに囚われていました。

 早速教えていただきました方法を試してみます。
 またご報告させて頂きます。
 取り急ぎお礼まで。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)