2016-04-07 2 views
0

У меня есть приложение VB и база данных MS Access как BackEnd. Я хочу отобразить все записи на моем db в Datagrid с текущей системной датой. У меня проблема с моим заявлением sql Я не знаю, как мне это сделать.Выражение Sql для фильтрации записей, которые имеют текущую системную дату

Он отображает сообщение об ошибке «Dataype несовпадение в Criteria Выражение»

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

Возможный дубликат [Сравнить дату с текущей датой с использованием SQL в MS Access 2013] (http://stackoverflow.com/questions/22895095/compare-date-with-current-date-using-sql -in-ms-access-2013) –

+0

Удалить выражение всей даты и использовать встроенную функцию 'Date()', например 'WHERE WorkDate()> = Date()'. Вы также должны избегать использования конкатенации строк во что бы то ни стало, поскольку это предоставляет вам как атаки SQL-инъекций, так и несоответствия формата * и * ToShortDateString. Использует локаль текущей системы, которая, вероятно, * не * соответствует формату даты. –

ответ

-2

Это должно сделать:

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

Отлично, тогда, пожалуйста, подтвердите и отметьте как ответ. – 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

Смежные вопросы