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

[Visual Basic 初心者掲示板] [過去ログの一覧]


りぼ 2008/01/31(木) 14:07:32 <初心者>
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(木) 14:26:16
フィールドの型が日付型なら、わざわざ LIKE を使う必要がないのでは???
 WHERE [日時] >= 今月1日 AND [日時] < 来月1日

りぼ 2008/01/31(木) 18:19:59 <初心者>
[[解決]]

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

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

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

特攻隊長まるるう 2008/01/31(木) 19:40:13
日付型なんだから、日付型で比較するのが一番なんだけど、
毎年、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/01/31(木) 19:46:00
>あとは、SQLインジェクション対策をすべきだけど
あ、『場合によっては』と訂正させてください。
サンプル通りなら必要ないです。

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library