Visual Studio 2003とaccess 2000を使用して開発を行っています。
データベースに入っている日付データの今月分だけを表示させたいのですが正常に表示されません。
現在フォームに DataSet11 DataGrid1が配置されています。
DataGrid1へのテーブル一覧表示はできています。
SQL文でWHEREを使用するとDataGrid1には何も表示されないという結果になります。
'現在の日付取得
Dim SearchText1 = Now.ToString("yyyy/MM/")
SearchText1 = SearchText1 & "*"
'データベースに接続
DataGrid1.RowHeadersVisible = False
Dim OleConn As OleDb.OleDbConnection = New OleDb.OleDbConnection
Dim OleDA As OleDb.OleDbDataAdapter
Dim dtSet As DataSet = New DataSet("今月表示")
Dim dtTable As DataTable
OleConn.ConnectionString = _
"provider=microsoft.jet.oledb.4.0;" & _
"data source=scheduler.mdb;" & _
"persist security info=false"
'SQL文の定義
OleDA = New OleDb.OleDbDataAdapter("SELECT 予定,日時 FROM db WHERE 日時 LIKE'" & SearchText1 & "'", OleConn)
OleDA.Fill(dtSet, "今月表示")
dtTable = dtSet.Tables("今月表示")
DataGrid1.DataSource = dtSet.Tables(0)
というようなコードをネット上のサイトを参考に作成してみました。
上記のコードでデバッグを行うとDataGrid1には何も表示されない状態になります。
よろしくお願いします。
フィールドの型が日付型なら、わざわざ LIKE を使う必要がないのでは???
WHERE [日時] >= 今月1日 AND [日時] < 来月1日
特攻隊長まるるう様
返信ありがとうございます。
ご指導の通りにやってみたところ、
満足のいく表示となりました。
ありがとうございました。
日付型なんだから、日付型で比較するのが一番なんだけど、
毎年、5月のデータだけ集めたいとか、まぁ、LIKE を使う方が
有効な場面があるのかもしれません(ちょっと思い浮かびませんがw)
LIKE は文字列検索なので、日付型と比較するところに無理があります。
文字列に変換してやれば正常な動作になるでしょう。
文字列変換の SQL は DB に依存します。
Access は Format 関数があるのかなぁ。
http://www.accessclub.jp/bbs3/0009/superbeg3843.html
あとは、SQLインジェクション対策をすべきだけど、質問とは直接
関係ないので割愛します。
http://www.atmarkit.co.jp/fsecurity/rensai/hoshino09/hoshino01.html
>あとは、SQLインジェクション対策をすべきだけど
あ、『場合によっては』と訂正させてください。
サンプル通りなら必要ないです。
ツイート | ![]() |