Доступ к vba sql запросу с датой в формате дд / мм / гггг - PullRequest
1 голос
/ 10 февраля 2020

Я искал, как решить мою проблему во многих постах, но не могу найти ответ.

Мне нужно выполнить выборку в sql, где одним из критериев является дата, которая находится между двумя другими даты.

Моя проблема в том, что мое поле даты в базе данных является текстовой областью, и мне нужна дата для работы с

Если я запускаю свое предложение sql с записанной датой, оно работает , но есть проблема, когда я использую переменные, здесь я показываю используемый код.

Заранее спасибо

 Dim fechaM As Date
 Dim fechaAnt As String
 Dim fechaPost As String

fechaM = Format(CDate(Nz(rs!fecha_m)), "dd/mm/yyyy")
fechaAnt = Format(CDate(Nz(rs!fecha_m)) - 7, "dd/mm/yyyy")
fechaPost = Format(CDate(Nz(rs!fecha_m)) + 7, "dd/mm/yyyy")

Set rsAguas = Db.OpenRecordset("SELECT table_user.nombre FROM table_user INNER JOIN M_A ON " & _
                                   "table_user.localizacion = M_A.localizacion WHERE " & _
                                   " fechaM " Between " & fechaAnt & " AND " & fechaPost & " " & _
                                   " AND ((M_A.estado)=1)")

Когда я запускаю этот код, я не получаю ошибку, но это не не получить данные

Ответы [ 3 ]

0 голосов
/ 10 февраля 2020

Лучший способ справиться с международными датами в Access - это использовать функцию Allen browne SQLDate Allen browne site . функция

Function SQLDate(varDate As Variant) As String
'Purpose:    Return a delimited string in the date format used natively by JET SQL.
'Argument:   A date/time value.
'Note:       Returns just the date format if the argument has no time component,
'                or a date/time format if it does.
'Author:     Allen Browne. allen@allenbrowne.com, June 2006.
If IsDate(varDate) Then
    If DateValue(varDate) = varDate Then
        SQLDate = Format$(varDate, "\#mm\/dd\/yyyy\#")
    Else
        SQLDate = Format$(varDate, "\#mm\/dd\/yyyy hh\:nn\:ss\#")
    End If
End If

Конечная функция

0 голосов
/ 10 февраля 2020

Вы немного смешиваете это. Попробуйте:

Dim fechaM As Date
Dim fechaAnt As String
Dim fechaPost As String

fechaM = Nz(CVDate(rs!fecha_m.Value), Date)
fechaAnt = Format(DateAdd("d", -7, fechaM), "yyyy\/mm\/dd")
fechaPost = Format(DateAdd("d", 7, fechaM), "yyyy\/mm\/dd")

Set rsAguas = Db.OpenRecordset("SELECT table_user.nombre FROM table_user INNER JOIN M_A ON " & _
                                   "table_user.localizacion = M_A.localizacion WHERE " & _
                                   "(fechaMfield Between #" & fechaAnt & "# AND #" & fechaPost & "#) " & _
                                   "AND (M_A.estado = 1)")

Здесь fechaMfield - имя поля вашей даты в таблице.

Если fechaMfield - текст, используйте DateValue([fechaMfield]) в запросе.

0 голосов
/ 10 февраля 2020

Вы можете использовать встроенные функции DateValue и DateAdd:

WHERE 
    (M_A.estado = 1) AND
    DateValue(fechaM) Between DateAdd("d", -7, DateValue(fechaM)) AND DateAdd("d", 7, DateValue(fechaM))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...