vb.net
  • ms-access-2010
  • 2016-04-07 69 views 0 likes 
    0

    我有一個VB應用程序和MS Access數據庫作爲後端。我想將我的db上的所有記錄顯示到具有當前系統日期的Datagrid。 我在我的sql語句中遇到問題我不知道該怎麼做。Sql表達式篩選具有當前系統日期的記錄

    它顯示錯誤「Dataype不匹配的條件表達式」

    sqlqry = "Select * FROM tblAttendance WHERE WorkingDate >= '#" & 
              DateTime.Now.ToShortDateString() & "#'"  
        da = New OleDbDataAdapter(sqlqry, cnn) 
        Dim dt As New DataTable("tblAttendance") 
        da.Fill(dt) 
        Me.dgvAttendance.DataSource = dt 
        DataGridProperty(dgvAttendance) 
        DataGridAttendance(dgvAttendance) 
    
    +0

    刪除單引號 –

    +0

    [在MS Access 2013中使用SQL比較日期和當前日期](http://stackoverflow.com/questions/22895095/compare-date-with-current-date-using-sql -in-ms-access-2013) –

    +0

    刪除整個日期表達式並使用內置的Date()函數,例如'WHERE WorkingDate()> = Date()'。你應該避免不惜一切代價使用字符串連接,因爲這會暴露你們對SQL注入攻擊,性能差和*格式不匹配的問題 - 「ToShortDateString」使用當前系統的語言環境,可能*不匹配日期文字格式。 –

    回答

    -2

    這應該這樣做:

    sqlqry = "Select * FROM tblAttendance WHERE WorkingDate = #" & DateTime.ToDay.ToString("yyyy'/'MM'/'dd") & "#"  
    
    +0

    偉大的,然後請upvote和標記爲已回答。 – Gustav

    2

    則可能是通過DateTime爲字符串您的查詢問題。

    我的建議是使用參數,如OLEDB整合會照顧的正確參數傳遞到MS Access

    Dim sqlqry As String = "Select * FROM tblAttendance WHERE WorkingDate >= ?" 
    Dim da As New OleDbDataAdapter(sqlqry, cnn) 
    
    da.SelectCommand.Parameters.Add(New OleDb.OleDbParameter("@WorkingDate", DateTime.Now)) 
    
    Dim dt As New DataTable("tblAttendance") 
    da.Fill(dt) 
    Me.dgvAttendance.DataSource = dt 
    DataGridProperty(dgvAttendance) 
    DataGridAttendance(dgvAttendance) 
    

    從我的頭上,但是這次應該做的。

    +1

    很好的建議,儘管當前日期具體可以通過Date()函數返回。 –

    +0

    我的VB.NET生鏽了,我已經忘記了一些位:( – gzaxx

    相關問題