• ベストアンサー

Fillの使い方について

テキストボックスに入力された値によって、条件をつけ、データを取得、グリッドに表示するということを やりたいと思っています。 Fillメソッドにパラメータを追加して、テキストボックスの値を見るようにしています。 Me.CUSTOMERTableAdapter.Fill,Me.TextBox1.Text.ToString,TextBox2.Text.ToString,TextBox3.Text.ToString) テーブルアダプターのクエリは以下のようになっています。 SELECT FACTORY,KIGYOU,COMPANY FROM CUSTOMER WHERE (CompanyName LIKE :PARAM1 || '%') AND (TelNo LIKE :PARAM2 || '%') AND (FaxNo LIKE :PARAM3 || '%') ※前方一致検索をする仕様としています。 テキストボックスが空欄だった場合、WHERE句から外したいと考えています。 例えばTextBox1(PARAM1)が空であれば、 WHERE (TelNo LIKE :PARAM2 || '%') AND (FaxNo LIKE :PARAM3 || '%') としたいのです。 ケースごとにテーブルアダプターにクエリを作ればいいかと思ったのですが、テキストボックス1だけの場合、2だけの場合、3だけの場合、 1と2の場合…と作っていくと、かなりの数に なってしまいます。 最終的にテキストボックスは10個ほど配置する予定なので、 値がなければWHEREから外せれば一番良いのですが…。 方法がありましたらご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

入力条件に応じたWhere文を作成します。 テキストボックスからの入力を、Text1, Text2, Text3, ・・・として SQLのWHERE文を作成する例です。 Dim strWhere as String strWhere = "" If Text1<>"" Then   If strWhere<>"" Then     strWhere = strWhere & " AND "   End If   strWhere = strWhere & "("   strWhere = strWhere & ※(1番目の検索条件式)   strWhere = strWhere & ")" End If If Text2<>"" Then   If strWhere<>"" Then     strWhere = strWhere & " AND "   End If   strWhere = strWhere & "("   strWhere = strWhere & ※(2番目の検索条件式)   strWhere = strWhere & ")" End If If Text3<>"" Then   If strWhere<>"" Then     strWhere = strWhere & " AND "   End If   strWhere = strWhere & "("   strWhere = strWhere & ※(3番目の検索条件式)   strWhere = strWhere & ")" End If ・ ・ ・ として必要な条件の数だけ繰り返してWHERE文字列を作成します。 あとは、 strSQL = "SELECT FACTORY,KIGYOU,COMPANY FROM CUSTOMER WHERE " & strWhere としてSQL文を完成させます。 ※インデントのために全角スペ^ス使用

noname#32335
質問者

お礼

ありがとうございます。 やはりコードで制御したほうが確実なようですね。

その他の回答 (3)

回答No.4

たびたび連投すみません。 下の PL/SQL ですが、知人に試してみてもらったところ、まったくのでたらめのようです。 ごめんなさい。 SQL Server と同じ感じでいけるかと思いましたが違うようですね。 環境がないので検証できません... これ以上、嘘を書いてもしかたないので、とりあえず参考になりそうなリンクを張らせていただきます... (ちなみに SQL Server は検証済です) http://www15.ocn.ne.jp/~tashi/html/oracle/dev_plsql.html#N14.3

noname#32335
質問者

お礼

レスありがとうございます。 ストアドで制御しようかと思いましたが、 Fillのクエリを (パラメタ IS NULL OR 項目 LIKE パラメタ) とすることで、値がない時は条件なしと同様の動作を 実現させることができました。

回答No.3

お世話になります。 ちょっと書き足りなかったと思いますので 連投すみませんが補足させて下さい。 こんな感じのストアドプロシージャを作って それに対する TableAdapter を構成してやればよいと思います。 ■PL/SQL(もう何年もやってないので自信ないです、間違ってたらごめんなさい) CREATE OR REPLACE PROCEDURE TEST (   p_CompanyName VARCHAR(?) DEFAULT NULL,   p_TelNo VARCHAR(?) DEFAULT NULL,   p_FaxNo VARCHAR(?) DEFAULT NULL ) IS BEGIN   SELECT     FACTORY,     KIGYOU,     COMPANY   FROM     CUSTOMER   WHERE     ((p_CompanyName IS NULL) OR (CompanyName LIKE :p_CompanyName || '%'))     AND     ((p_TelNo IS NULL) OR (TelNo LIKE :p_TelNo || '%'))     AND     ((p_FaxNo IS NULL) OR (FaxNo LIKE :p_FaxNo || '%')) END ■T-SQL IF EXISTS (SELECT * FROM [dbo].[SYSOBJECTS] WHERE ID = OBJECT_ID(N'[dbo].[TEST]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) DROP PROCEDURE [dbo].[TEST] GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE TEST (   @p_CompanyName VARCHAR(?) = NULL,   @p_TelNo VARCHAR(?) = NULL,   @p_FaxNo VARCHAR(?) = NULL ) IS BEGIN   SET NOCOUNT ON;   SELECT     FACTORY,     KIGYOU,     COMPANY   FROM     CUSTOMER   WHERE     ((ISNULL(@p_CompanyName,'') IS '') OR (CompanyName LIKE @p_CompanyName + '%'))     AND     ((ISNULL(@p_TelNo,'') IS '') OR (TelNo LIKE @p_TelNo + '%'))     AND     ((ISNULL(@p_FaxNo,'') IS '') OR (FaxNo LIKE @p_FaxNo + '%')) END GO

回答No.1

お世話になります。 ストアドプロシージャにしましょう。

関連するQ&A