Добрый день
Пытаюсь обратится к листам через 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 ... |
Спасибо