重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

テキストボックスに入力された値によって、条件をつけ、データを取得、グリッドに表示するということを
やりたいと思っています。

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から外せれば一番良いのですが…。

方法がありましたらご教授ください。

A 回答 (4件)

入力条件に応じた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文を完成させます。

※インデントのために全角スペ^ス使用
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/08 11:36

たびたび連投すみません。



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

http://www15.ocn.ne.jp/~tashi/html/oracle/dev_pl …
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/08 11:38

お世話になります。



ちょっと書き足りなかったと思いますので
連投すみませんが補足させて下さい。

こんな感じのストアドプロシージャを作って
それに対する 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
    • good
    • 0

お世話になります。



ストアドプロシージャにしましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!