Кажется, что предложение WHERE не работает в моем коде VBA - PullRequest
0 голосов
/ 15 марта 2019
Dim rs As New ADODB.Recordset
Dim str SQL AS String
Dim strConn As String
Dim FUMR_date As Date

FUMR_date = "2019-02-20 11:00"
strSQL = "SELECT * FROM [initial DB] " & _
        " WHERE (date(LNT) < date(FUMR_date) )"


strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Alldata.mdb;" 
rs.Open strSQL, strConn, adOpenStatic, adLockReadOnly, adCmdText

В Alldata.mdb есть таблица с именем Initial DB. И LNT - это имя столбца исходной таблицы БД. Информация о дате находится в столбце LNT.

Что я пытаюсь сделать, это вызвать набор данных, в котором значение LNT раньше, чем FUMR_date. Но мой код не работает вообще. Всегда получал ошибку во время выполнения.

Я тоже пробовал

    " WHERE (Datevalue(LNT) < Datevalue(FUMR_date) )"

и это не сработало. Тем не менее,

    " WHERE (Datevalue(LNT) < Datevalue(now()) )"

этот код работает. Я не знаю почему. Пожалуйста, дайте мне знать проблему.

1 Ответ

2 голосов
/ 15 марта 2019

Командная строка отправляется прямо в базу данных. Однако FUMR_date является переменной VBA и не известна в вашей базе данных.
Для быстрого решения напишите " WHERE (date(LNT) < date('" & FUMR_date & "') )" - это поместит содержимое переменной (в виде строки) в предложение Where.

Однако было бы намного лучше использовать команду ADODB и добавить параметр ADODB для даты, чтобы вам не приходилось заботиться о форматах даты

...