- - PR -
TableAdapterメソッドのパラメータを省略したい。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-07 13:45
VB2005環境です。
クエリビルダにて、以下のようなSQL文を作成しました。 SELECT * FROM TestTable WHERE (Name LIKE :PARAM1 || '%') AND (Add LIKE :PARAM2 || '%') AND (TelNo LIKE :PARAM3 || '%') AND これを、それぞれフォームにあるテキストボックスの値を渡して使っています。 Me.TestTableAdapter.Fill(Me.DataSet1.Test,TextBox1.Text.ToString, TextBox2.Text.ToString,TextBox3.Text.ToString) テキストボックスに値がない時は、パラメータを省略したいと考えています。 例えば、TextBox2,3が空白であれば、 Me.TestTableAdapter.Fill(Me.DataSet1.Test,TextBox1.Text.ToString)になり、 SQL文としては SELECT * FROM TestTable WHERE (Name LIKE :PARAM1 || '%') になる、といった具合です。 ケースごとにパラメータの数が異なるメソッドを作れば良いかと考えましたが、 テキストボックスの数が増えてくると、膨大な量のメソッドを作らねばなりません。 状況に応じてFillのパラメータが省略できる、WHERE句が変われば良いのですが、 これを実現できる方法がありましたら教えていただけないでしょうか? よろしくお願いします。 [ メッセージ編集済み 編集者: シラブル 編集日時 2007-03-07 13:46 ] | ||||
|
投稿日時: 2007-03-07 14:26
不特定多数の引数が必要な場合は、パラメータ配列というのが使えるのではないでしょうか。
詳細 http://msdn2.microsoft.com/ja-jp/library/538f81ec(VS.80).aspx [ メッセージ編集済み 編集者: すけけん 編集日時 2007-03-07 14:34 ] | ||||
|
投稿日時: 2007-03-07 14:59
レスありがとうございます。
実際にFillにパラメータ配列を入れる方法がいまいちわからないので 図々しいお願いで恐縮ですが、出来ればサンプル的なコードを交えて 教えていただけないでしょうか? | ||||
|
投稿日時: 2007-03-07 15:34
NAL-6295です。
最近、似たようなスレッドがありました。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37111&forum=7&4 | ||||
|
投稿日時: 2007-03-07 17:57
クエリビルダを使用しないで自分で定義するので面倒かもしれませんが。。
自動で生成されたTestTableAdapterクラスがいると思います。 そのクラスの部分クラスを作成して、部分クラス内にFillメソッドを自分で定義する感じです。
こんな感じです。 Namespaceとクラス名は適宜変更してください。 #自分の発想なので、ご参考程度に(^^; | ||||
|
投稿日時: 2007-03-07 18:04
>NAL-6295さん
レスありがとうございます。 ご提示いただいたスレッドの内容は、IS NULLか、 nvlを使う方法でした。 IS NULLを使った場合、条件を入れても値がNULLのものまで 引っ張ってしまいますし、 といってnvl関数を用いて TEL_NO LIKE nvl( :TELNO || '%',TEL_NO) とした場合、%と連結するため、テキストボックスを空白にした場合でも NULLになりません。 これ以外の方法で何かないでしょうか…? | ||||
|
投稿日時: 2007-03-07 21:46
もうちょっと、良く読んだ方が良いです。 パラメータ IS NULL OR 項目 = パラメータ とした場合、 パラメータがNULLかパラメータが項目の値と同じ場合 となります。 つまり、パラメータがNULLの時は、常にTrue パラメータがNULLじゃない時は、パラメータと項目の値が同じ時だけTrue となりますので、結果的に パラメータがNullの時は、条件が無い時と同じで、 パラメータがNullじゃ無いときは 項目 = パラメータ の条件が成立するようになります。 | ||||
|
投稿日時: 2007-03-08 11:26
>すけけんさん
お手数をおかけして申し訳ありません。 なるほど、そういう方法もあるのですね。 大変参考になりました。 >NAL-6295さん 項目 IS NULL OR 項目 = パラメータ と勘違いしていたためおかしかったようです。 ご指摘の通り、条件無しと同様の動作が実現できました。 ありがとうございました。 |