Синтаксическая ошибка в запросе Microsoft Access SQL Select в процедуре VBA

У меня есть следующий код VBA, который дает синтаксическую ошибку. Может кто-нибудь, пожалуйста, помогите мне понять, что вызывает ошибку?

Private Sub Command11_Click()
    Dim EndingDate As Date
    'Getting ending date from Label named endDate
    EndingDate = endDate
    StartingDateTxt = DateSerial(Year(EndingDate), Month(EndingDate) - 15, Day(EndingDate))

    Dim customerRecords As New ADODB.Recordset
    customerRecords.Open "SELECT COUNT(*) AS N FROM (SELECT   DISTINCT E.Date,"&_
                        "E.[Inv Num],   E.CusName, E.[Name Street1], E.[Name Street2], "&_
                        "E.[Name City], E.[Name State], E.[Name Zip], E.[Account #], E.Amount FROM TempFromExcel "&_
                        "AS E  INNER JOIN TempFromExcel AS X ON E.CusName = X.CusName "&_
                        "WHERE (((DateDiff("d",X.Date,E.Date))>=30))  AND E.Date >= '" & StartingDateTxt & "' and"&_
                        "E.Date <= '" & endDate & "') AS T ;", _
                 CodeProject.Connection , _
                 adOpenStatic, _
                 adLockOptimistic, _
                 adCmdText
    MsgBox customerRecords("N")

End Sub

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

Я думаю, что могу отсутствовать только в этой части. Остальное кажется прекрасным, так как я явно проверил запрос, и он работает нормально. Так это правильно?

E.Date >= '" & StartingDateTxt & "' and E.Date <= '" & endDate & "'

Это было исправлено в ответе, но я все еще получаю синтаксическую ошибку в первой строке инструкции Select. Что-то упускаю?


person ms8    schedule 01.06.2015    source источник
comment
stackoverflow.com/questions/4183180/   -  person Tim Williams    schedule 01.06.2015


Ответы (2)


Попробуйте изменить эти строки:

"WHERE (DateDiff('d', X.Date, E.Date) >= 30 AND E.Date >= #" & Format(StartingDateTxt, "yyyy\/mm\/dd") & "# and " & _
"E.Date <= #" & Format(endDate, "yyyy\/mm\/dd") & "#) AS T ;", _
person Gustav    schedule 01.06.2015

В SQL-запросе Microsoft Access вы должны инкапсулировать значение даты в ##, например, #06/01/2015#. В вашем случае это должно выглядеть так:

E.Date >= #" & StartingDateTxt & "# AND E.Date <=#" & endDate & "#"

Надеюсь, это может помочь.

person Alexander Bell    schedule 01.06.2015
comment
Не могли бы вы переписать запрос тогда? - person ms8; 01.06.2015
comment
Также это просто предположение. Правильно ли написана другая часть запроса Select? - person ms8; 01.06.2015
comment
Я расширил ответ в соответствии с вашим запросом, касающимся вашего исходного вопроса. Если вы удовлетворены, пожалуйста, отметьте его принятым. Если у вас есть дополнительные вопросы, пожалуйста, задайте их отдельно. Спасибо и привет, - person Alexander Bell; 01.06.2015
comment
Теперь ошибка находится в первой строке в соответствии с отладчиком, который является customerRecords. Open SELECT COUNT (*) AS N FROM (SELECT DISTINCT E.Date, &_ - person ms8; 01.06.2015
comment
Как я уже советовал вам, пожалуйста, разместите свой второй вопрос отдельно, выделив только проблемную часть SQL (удаленная отладка вашего кода - сложная задача, если вы не видите фактическую структуру таблицы и примеры данных). С наилучшими пожеланиями, - person Alexander Bell; 01.06.2015