Добрый день
Пытаюсь обратится к листам через SQL запрос, чтобы получить выборку данных, например все данные с 3 часов до 8 часов.
Отлавливаю ошибку
Run-time error '-2147217913 (80040e07)
Несоответствие типов данных в выражении условия отбора
Сам код как мне кажется рабочий.
Так если SQL запрос ограничить таким вариантом
sSQL = "SELECT * FROM " & tableName
то все работает, но проблема у столбца со временем, в котором значения становятся некорректными вместо 2:54:00 там 00.01.1900 2:54:00.
Предполагаю что ошибка в несоответствии типов SQL и VBA.
Соответственно фрагмент кода, где это все происходит.
Подскажите, как исправить проблему
Спасибо
Пытаюсь обратится к листам через SQL запрос, чтобы получить выборку данных, например все данные с 3 часов до 8 часов.
Отлавливаю ошибку
Run-time error '-2147217913 (80040e07)
Несоответствие типов данных в выражении условия отбора
Сам код как мне кажется рабочий.
Так если SQL запрос ограничить таким вариантом
sSQL = "SELECT * FROM " & tableName
то все работает, но проблема у столбца со временем, в котором значения становятся некорректными вместо 2:54:00 там 00.01.1900 2:54:00.
Предполагаю что ошибка в несоответствии типов SQL и VBA.
Соответственно фрагмент кода, где это все происходит.
| Код |
|---|
...
Dim startLT As Double
Dim endLT As Double
startLT = ThisWorkbook.Worksheets(1).Range("D7").Value
endLT = ThisWorkbook.Worksheets(1).Range("E7").Value
'преобразую в формат пользовательский hh.hh в формат hh:mm:ss (т.е. 2.5 = 2:30:00)
Dim startTime As Date
Dim endTime As Date
startTime = CDate(startLT / 24)
endTime = CDate(endLT / 24)
Dim CN As New ADODB.connection
CN.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & fName & _
";Extended Properties=""Excel 12.0;HDR=YES"""
CN.Open
'листы для запросов
Dim names
names = Array("000", "001", "010", "011", "100", "101", "110")
Dim i As Long
Dim sSQL As String
Dim tableName As String
Dim sqlTime As String
sqlTime = "SQLTime" 'заголовок столбца
For i = 1 To UBound(names, 1)
ActiveWorkbook.Worksheets("Summary").Activate
'очистка для удобства теста
ActiveSheet.Cells.Select
Selection.Delete xlUp
Selection.Clear
Set RS = Nothing
Set RS = CreateObject("ADODB.Recordset")
tableName = "[" & CStr(names(i)) & "$]"
sSQL = "SELECT * FROM " & tableName & " WHERE " & sqlTime & " BETWEEN '" & startTime & "' AND '" & endTime & "'"
'в окне locals значения
'sSQL ="SELECT * FROM [001$] WHERE SQLTime BETWEEN '3:00:00' AND '8:00:00'"
'startTime=#3:00:00# '<- тип Date
'endtime=#8:00:00# '<- тип Date
MsgBox sSQL
RS.Open sSQL, CN ' <<<< РУГАЕТСЯ НА ЭТУ СТРОКУ
ActiveWorkbook.Worksheets("Summary").Activate
Range("A1").CopyFromRecordset RS
Next i
... |
Спасибо