none
日期區間問題 RRS feed

  • 問題

  • 以下是我寫的程式,是要用日期區間來查詢:
    Dim connstr, selectcmd As String
    connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=report.mdb"
    selectcmd = "select * from report where writedate between '" & DateTimePicker1.Value & "' and '" & DateTimePicker2.Value & "'"
    Dim conn As OleDbConnection, myadapter As OleDbDataAdapter
    Dim mydataset As New DataSet()
    conn = New OleDbConnection(connstr)
    conn.Open()
    myadapter = New OleDbDataAdapter(selectcmd, conn)
    myadapter.Fill(mydataset, "report")
    DataGrid1.DataSource = mydataset
    DataGrid1.DataMember = "report"
    可是出現的卻都不是我要的區間,比如說我的資料庫中明明就有2006/08/09與2006/08/10的資料可是我選擇2006/08/01~2006/08/31之間的資料全部show出來,可是它一筆都沒有show><"而我選擇2006/08/1~2006/08/08它卻秀出2006/08/10這一筆,到底怎麼一回事><"到底語法是什麼呢?好像都要選到那一筆才會show出該筆資料哩><"我的語法這樣對嗎?是用「between...and」嗎?怎麼會這樣~哪位大大來救救我呀~~感激~~~~~~~~~~
    2006年8月3日 上午 09:26

解答

  • 從你的問題分析,你 writedate 應該用的是字串格式,當你使用字串格式的時候,你就不能用日期數值的特性,若要用日期數值的特性,就必須改為日期格式。

    若堅持要用字串格式,當你把字串寫入資料庫時,必須用 yyyy/MM/dd 這類固定格式,才好做字串大小於的判讀,不然就是像上面那樣,使用前用 CDate 函數轉換為日期變數判讀。

    但是經常性大量轉換並不利於效能最佳化。

    2006年8月3日 上午 10:01
    版主

所有回覆

  • 建議檢查步驟:

    一、檢查DateTimePicker的Format。(可設定為Custom)

    二、然後在CustomFormat設定yyyy/MM/dd

    三、用設中斷點方式去看你的selectCoommand是否正確。

    四、祝你順利。

    2006年8月3日 上午 09:49
    版主
  • 你的 WriteDate 格式是?

    若是日期格式,請用:

    writedate between #" & DateTimePicker1.Value & "# and #" & DateTimePicker2.Value & "#"

    若是字串格式,請用:

    CDate(writedate) between #" & DateTimePicker1.Value & "# and #" & DateTimePicker2.Value & "#"

    2006年8月3日 上午 09:56
    版主
  • 從你的問題分析,你 writedate 應該用的是字串格式,當你使用字串格式的時候,你就不能用日期數值的特性,若要用日期數值的特性,就必須改為日期格式。

    若堅持要用字串格式,當你把字串寫入資料庫時,必須用 yyyy/MM/dd 這類固定格式,才好做字串大小於的判讀,不然就是像上面那樣,使用前用 CDate 函數轉換為日期變數判讀。

    但是經常性大量轉換並不利於效能最佳化。

    2006年8月3日 上午 10:01
    版主