
テキストボックスに入力された値によって、条件をつけ、データを取得、グリッドに表示するということを
やりたいと思っています。
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文を完成させます。
※インデントのために全角スペ^ス使用
No.4
- 回答日時:
たびたび連投すみません。
下の PL/SQL ですが、知人に試してみてもらったところ、まったくのでたらめのようです。
ごめんなさい。
SQL Server と同じ感じでいけるかと思いましたが違うようですね。
環境がないので検証できません...
これ以上、嘘を書いてもしかたないので、とりあえず参考になりそうなリンクを張らせていただきます...
(ちなみに SQL Server は検証済です)
http://www15.ocn.ne.jp/~tashi/html/oracle/dev_pl …
レスありがとうございます。
ストアドで制御しようかと思いましたが、
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- Visual Basic(VBA) visual basic初心者です。 visual studioで電卓を作成しています。 実行時にテ 1 2023/02/08 00:18
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- MySQL テーブル名が可変の場合のクエリの書き方 1 2023/02/17 21:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでテキストボッ...
-
テキストボックスを空白にする方法
-
ループを使ってテキストボック...
-
VB2005テキストボックスへのコ...
-
ユーザーフォームへのデータ入...
-
【VB.NET】テキストボックスに...
-
アクセスできない保護レベルエ...
-
コンボボックスからテキストボ...
-
visual basic初心者です。 visu...
-
レコードセットにnullの場合
-
他のフォームから別のフォーム...
-
VC++ (byte)(col & 0xFF) の意味
-
演奏記号の・・・・
-
VBAでフィールドを配列読み
-
C#のループでtextboxに値を入れ...
-
pthread_cond_waitとptherad_co...
-
ClickとChangeイベントの違いは...
-
定数を構造体で・・・
-
Excel VBA: private sub 内の...
-
二点の座標から距離や角度を求...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスできない保護レベルエ...
-
エクセルVBAでテキストボッ...
-
【VB.NET】テキストボックスに...
-
visual basic初心者です。 visu...
-
VBAで入力数値について
-
ユーザーフォームへのデータ入...
-
VBAのユーザーフォームで、テキ...
-
コンボボックスからテキストボ...
-
VBでの入力値制限について
-
テキストボックスに大文字を
-
テキストボックスにカーソルを...
-
VBでローマ字入力とかな入力を...
-
年齢の計算について
-
ACCESS 除算での小数点切上げ方法
-
Excel ユーザーフォームで計算 ...
-
【C#】コンボボックスにおけるS...
-
VB2010 TextBoxの数字の表示...
-
VBAのフォーム カーソル移動
-
TextBoxの内容を右寄せ
-
VB2005テキストボックスへのコ...
おすすめ情報