データベースから今月の日付のみを表示するには?

解決


りぼ  2008-01-31 23:07:32  No: 138781

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には何も表示されない状態になります。
よろしくお願いします。


特攻隊長まるるう  2008-01-31 23:26:16  No: 138782

フィールドの型が日付型なら、わざわざ LIKE を使う必要がないのでは???
  WHERE [日時] >= 今月1日 AND [日時] < 来月1日


りぼ  2008-02-01 03:19:59  No: 138783

特攻隊長まるるう様
返信ありがとうございます。

ご指導の通りにやってみたところ、
満足のいく表示となりました。

ありがとうございました。


特攻隊長まるるう  2008-02-01 04:40:13  No: 138784

日付型なんだから、日付型で比較するのが一番なんだけど、
毎年、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


特攻隊長まるるう  2008-02-01 04:46:00  No: 138785

>あとは、SQLインジェクション対策をすべきだけど
あ、『場合によっては』と訂正させてください。
サンプル通りなら必要ないです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加