- PR -

Gridview 複数検索

投稿者投稿内容
BBSR
大ベテラン
会議室デビュー日: 2006/08/30
投稿数: 121
お住まい・勤務地: 大阪
投稿日時: 2008-01-11 14:52
お世話になります
複数テキストボックス配置でGridviewをあいまいに絞込み検索させています
下記
WHERE ((列1 LIKE '%' + @param1 + '%') OR (列1 IS NULL AND @param1 = '')) AND ((列2 LIKE '%' + @param2 + '%') OR (列2 IS NULL AND @param2 = ''))

上記の内容で検索させていますが日付になると不可のようです
書式は{0:yyyy/MM/dd}です

SQL及びパラメータの追加で日付けも検索可能だと思うのですが
手法が分かりません

分かる方宜しくお願いします
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2008-01-12 05:36
日付は

BETWEEN fromdate AND todate

を使用したらどうでしょうか。

_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
BBSR
大ベテラン
会議室デビュー日: 2006/08/30
投稿数: 121
お住まい・勤務地: 大阪
投稿日時: 2008-01-15 10:14
お返事ありがとうございます
当方初心者なのでできればコードで願いたいのですが
宜しくお願いします。
BBSR
大ベテラン
会議室デビュー日: 2006/08/30
投稿数: 121
お住まい・勤務地: 大阪
投稿日時: 2008-01-15 10:56
調べたのですがBETWEENは、日付型で間に挟まれた物を検出させることができる
演算子ですね?
Accessで動作確認取れました。

WHERE (((管理簿.日付) Between [Forms]![フォーム1]![テキスト0] And [Forms]![フォーム1]![テキスト2]));

これをどのように組み合わせるのかわかりません
むーみん
常連さん
会議室デビュー日: 2005/06/23
投稿数: 41
投稿日時: 2008-01-15 13:50
はじめまして。

データベースはSQL Serverなのですか?
あと、日付はどのように検索させたいのですか?
テキストボックスに開始日付と終了日付を指定して、その範囲で検索したいのか、
日付を一つ指定して、イコールで検索させたいのか、によって変わると思います。

BBSR
大ベテラン
会議室デビュー日: 2006/08/30
投稿数: 121
お住まい・勤務地: 大阪
投稿日時: 2008-01-15 14:45
引用:

むーみんさんの書き込み (2008-01-15 13:50) より:
はじめまして。

データベースはSQL Serverなのですか?
あと、日付はどのように検索させたいのですか?
テキストボックスに開始日付と終了日付を指定して、その範囲で検索したいのか、
日付を一つ指定して、イコールで検索させたいのか、によって変わると思います。




お返事ありがとうございます
データベースはAccessです
日付けの理想検索方法は
Textbox1、開始日だけで検索可能
Textbox2、終了日付だけで検索可能
両方入力するとその範囲で検索可能
3パターンが理想です。
可能ですか?

ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-01-15 16:01
ヒマがあったので組んでみた。
検索条件の「日付」がDateTimeだともうちょっと違ってくるでしょうが、
要は条件によってSQLを変えてあげればいけますよね?
ってそういうことが聞きたいんじゃないのかな・・・。
(テキトーに組んでるので異常処理とかは省いてます)

VS2005 C#

表示用グリッド:
private System.Windows.Forms.DataGridView dataGrid1;
開始日テキストボックス:
private System.Windows.Forms.TextBox textFmDt;
終了日テキストボックス:
private System.Windows.Forms.TextBox textToDt;
検索ボタン:
private System.Windows.Forms.Button btnSearch;

DB
ACCSESS2003 SP2
テーブル
ID:オートナンバー型
Hiduke:テキスト型

ソース
〜割愛
using System.Data.OleDb;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btnSearch_Click(object sender, EventArgs e)
{
// 1)変数の宣言
OleDbConnection OleConn = new OleDbConnection();
OleDbDataAdapter OleDA;
DataSet dtSet = new DataSet("DataTable");
DataTable dtTable;
string strSql ;

// 2)接続文字列の作成
OleConn.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=C:\\WORK\\実験\\@IT\\TestDB.mdb;" +
"Persist Security Info=False";

// 3)データを取得するためのSQL文を作成する
strSql = "SELECT * FROM TABLE1 ";

if ((textFmDt.Text != "") && (textToDt.Text != ""))
{
//開始・終了ともに入力あり
strSql += "WHERE Hiduke BETWEEN ";
strSql += "'" + textFmDt.Text + "'";
strSql += " AND ";
strSql += "'" + textToDt.Text + "'";
}
else if (textFmDt.Text != "")
{
//開始のみ入力あり
strSql += "WHERE Hiduke = ";
strSql += "'" + textFmDt.Text + "'";
}
else if (textToDt.Text != "")
{
//終了のみ入力あり
strSql += "WHERE Hiduke = ";
strSql += "'" + textToDt.Text + "'";
}
else
{
//開始・終了ともに入力なし
MessageBox.Show("検索条件を指定してください。");
return;
}

OleDA = new OleDbDataAdapter(strSql, OleConn);

// 4)データセットにデータを取得する
OleDA.Fill(dtSet, "DataTable");

// 5)データセットからテーブルを取得する
dtTable = dtSet.Tables["DataTable"];

// DataGridにデータを表示する
dataGrid1.DataSource = dtSet.Tables[0];


}
}
}
むーみん
常連さん
会議室デビュー日: 2005/06/23
投稿数: 41
投稿日時: 2008-01-15 16:03
コード:
 and (日付列 >= IIf(IsDate(@StartDate) = False, Null, @StartDate) or IsDate(@StartDate) = False)
 and (日付列 <= IIf(IsDate(@EndDate) = False, Null, @EndDate) or IsDate(@EndDate) = False)



@StartDate、@EndDateは10桁の"yyyy/MM/dd"形式の文字列です。

この方法でどうでしょうか。
もっといい方法があるのかもしれないですが、私にはこれしか思いつきませんでした。

参考にならなかったらすみません。

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