- ぴんふ
- ベテラン
- 会議室デビュー日: 2006/07/13
- 投稿数: 80
|
投稿日時: 2008-01-15 16:32
あれれ?
もしかしてすべてACCESSでやりたいってこと?
となると投稿先はDataBase Expertあたりのほうが良くはないですか?
|
- むーみん
- 常連さん
- 会議室デビュー日: 2005/06/23
- 投稿数: 41
|
投稿日時: 2008-01-15 16:40
引用: |
|
ぴんふさんの書き込み (2008-01-15 16:32) より:
もしかしてすべてACCESSでやりたいってこと?
|
ぴんふさん、わたしが勝手に解釈してしまいました。
最初に書いてあった文字列のあいまい検索の部分で、
パラメータに入力がないときの判別をSQL文内でされていたので。。。
なんか無理やりやった感じもあります。
ぴんふさんのようにしたほうがコードは分かりやすくていいと思います。
|
- BBSR
- 大ベテラン
- 会議室デビュー日: 2006/08/30
- 投稿数: 121
- お住まい・勤務地: 大阪
|
投稿日時: 2008-01-15 22:18
引用: |
|
ぴんふさんの書き込み (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];
}
}
}
|
お返事ありがとうございます
私の質問不足で申し訳ないのですが
C#ではなくVisualBasicを使用しています
VisualBasicはおろかC#はまったく未知です、すみません
ヒマとはいえ大変ありがとうございます。
|
- BBSR
- 大ベテラン
- 会議室デビュー日: 2006/08/30
- 投稿数: 121
- お住まい・勤務地: 大阪
|
投稿日時: 2008-01-16 11:49
引用: |
|
むーみんさんの書き込み (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"形式の文字列です。
この方法でどうでしょうか。
もっといい方法があるのかもしれないですが、私にはこれしか思いつきませんでした。
参考にならなかったらすみません。
|
お返事ありがとうございます
とんでもありません参考にさせて頂いております。
パラメータの書き方がいまいち分からないのですが現在は
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" ConvertEmptyStringToNull="False" Name="?"PropertyName="Text" />
</SelectParameters>
ですが回答を頂いたSQL分を使用すると分からなくてやっぱり
1 つ以上の必要なパラメータの値が設定されていません。
と出てしまいます。
|
- むーみん
- 常連さん
- 会議室デビュー日: 2005/06/23
- 投稿数: 41
|
投稿日時: 2008-01-16 13:30
引用: |
|
BBSRさんの書き込み (2008-01-16 11:49) より:
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" ConvertEmptyStringToNull="False" Name="?"PropertyName="Text" />
</SelectParameters>
ですが回答を頂いたSQL分を使用すると分からなくてやっぱり
1 つ以上の必要なパラメータの値が設定されていません。
と出てしまいます。
|
すみません、私は、Visual BasicでWindowsアプリケーションを開発する知識しかないので、原因はわかりません。投稿しておいて、中途半端でお役に立てずすみません。
一応、BBSRさんのご質問への回答にはならないですが、
Windowsアプリケーションで、正常に動作すると思われるコードを載せておきます。
お役にたてばいいのですが
コード: |
|
' 検索用SQL作成
Dim sql As String = String.Empty
sql = "select * from table1"
sql &= " where ((列1 LIKE '%' + @param1 + '%') OR (列1 IS NULL AND @param1 = ''))"
sql &= " and ((列2 LIKE '%' + @param2 + '%') OR (列2 IS NULL AND @param2 = ''))"
sql &= " and (日付列 >= IIf(IsDate(@StartDate) = False, Null, @StartDate) or IsDate(@StartDate) = False)"
sql &= " and (日付列 <= IIf(IsDate(@EndDate) = False, Null, @EndDate) or IsDate(@EndDate) = False)"
' 接続の宣言
Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "パスを記述")
' Select Commandの宣言
Using cmd As New OleDbCommand(sql, cn)
With cmd.Parameters
.Add("@Param1", OleDbType.VarChar).Value = TextBox1.Text
.Add("@Param2", OleDbType.VarChar).Value = TextBox2.Text
.Add("@StartDate", OleDbType.VarChar).Value = TextBox3.Text
.Add("@EndDate", OleDbType.VarChar).Value = TextBox4.Text
End With
' DataAdapterの宣言
Using da As New OleDbDataAdapter(cmd)
Dim dt As New DataTable
da.Fill(dt)
' DataGridViewにバインド
DataGridView1.DataSource = dt
End Using
End Using
End Using
|
ただ、ぴんふさんの書いたようにしたほうがSQL文がすっきりすると思いますし、Parameterを作成する必要もなくなります。
コード: |
|
' 検索用SQL作成
Dim sql As String = String.Empty
sql = "select * from table1"
sql &= "where 1 = 1"
If Not TextBox1.Text = "" Then
sql &= " and 列1 LIKE '%' + " & TextBox1.Text & " + '%'"
End If
If Not TextBox2.Text = "" Then
sql &= " and 列2 LIKE '%' + " & TextBox2.Text & " + '%'"
End If
If IsDate(TextBox3.Text) Then
sql &= " and 日付列 >= " & TextBox3.Text
End If
If IsDate(TextBox4.Text) Then
sql &= " and 日付列 <= " & TextBox4.Text
End If
' 接続の宣言
Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "パスを記述")
' Select Commandの宣言
Using cmd As New OleDbCommand(sql, cn)
' DataAdapterの宣言
Using da As New OleDbDataAdapter(cmd)
Dim dt As New DataTable
da.Fill(dt)
' DataGridViewにバインド
DataGridView1.DataSource = dt
End Using
End Using
End Using
|
あと、ちなみにC#のコードをVBに翻訳してくれるページがありますよ。
http://authors.aspalliance.com/aldotnet/examples/translate.aspx
[ メッセージ編集済み 編集者: むーみん 編集日時 2008-01-16 13:33 ]
|
- BBSR
- 大ベテラン
- 会議室デビュー日: 2006/08/30
- 投稿数: 121
- お住まい・勤務地: 大阪
|
投稿日時: 2008-01-16 14:53
貴重なコードありがとうございます
参考にさせていただきます。
逆に私はWEBだけなのでごめんなさい質問内容が大雑把せいで・・・
ご迷惑をお掛けします
私もWindowsアプリを実現させたいのですが
WEBからはいってしまいWindowsアプリはさっぱりです;;
やはり管理簿製作はWindowsアプリのほうが手軽なのでしょうか?
時間をあけもう一度詳しく質問をし直してみたいと思います。
ありがとうございましたm(__)m
|
- ぶさいくろう
- ぬし
- 会議室デビュー日: 2005/11/22
- 投稿数: 1232
- お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
|
投稿日時: 2008-01-16 15:24
引用: |
|
BBSRさんの書き込み (2008-01-16 14:53) より:
貴重なコードありがとうございます
参考にさせていただきます。
逆に私はWEBだけなのでごめんなさい質問内容が大雑把せいで・・・
ご迷惑をお掛けします
私もWindowsアプリを実現させたいのですが
WEBからはいってしまいWindowsアプリはさっぱりです;;
やはり管理簿製作はWindowsアプリのほうが手軽なのでしょうか?
時間をあけもう一度詳しく質問をし直してみたいと思います。
ありがとうございましたm(__)m
|
WebでもWindowsでもこのあたりって変わらねーんじゃね?
ミドルウェアから先の話だよね?
Webに自信があるなら余裕だと思うけどなぁ・・・
|
- BBSR
- 大ベテラン
- 会議室デビュー日: 2006/08/30
- 投稿数: 121
- お住まい・勤務地: 大阪
|
投稿日時: 2008-01-17 20:05
引用: |
|
ぶさいくろうさんの書き込み (2008-01-16 15:24) より:
引用: |
|
BBSRさんの書き込み (2008-01-16 14:53) より:
貴重なコードありがとうございます
参考にさせていただきます。
逆に私はWEBだけなのでごめんなさい質問内容が大雑把せいで・・・
ご迷惑をお掛けします
私もWindowsアプリを実現させたいのですが
WEBからはいってしまいWindowsアプリはさっぱりです;;
やはり管理簿製作はWindowsアプリのほうが手軽なのでしょうか?
時間をあけもう一度詳しく質問をし直してみたいと思います。
ありがとうございましたm(__)m
|
WebでもWindowsでもこのあたりって変わらねーんじゃね?
ミドルウェアから先の話だよね?
Webに自信があるなら余裕だと思うけどなぁ・・・
|
WEBも自身がありません初心者ですみません
|