Excel VBA: SQl-запрос CSV-файла возвращает целое число вместо двойного - PullRequest
1 голос
/ 22 мая 2019

В Excel у меня есть код VBA, который использует ADO для создания запроса к CSV-файлу.Запрос возвращает некоторые поля выбора в набор записей, который я затем извлекаю данные, необходимые для отчета.Поле содержит строковые и числовые значения.

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

Вот как я настроить запрос и получить набор записей:

Private Function getRecordSet(ByVal fileSource As String, ByVal fileName As String) As ADODB.Recordset

    Dim con As New ADODB.Connection
    Dim cmd As New ADODB.command
    Dim rs As ADODB.Recordset

    'set up connection to file source
    con.Provider = "Microsoft.Jet.OLEDB.4.0"
    con.ConnectionString = _
        "Data Source=" & fileSource & ";" & _
        "Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;"""
    con.Open
    con.CursorLocation = adUseClient
    cmd.ActiveConnection = con

    'set up and execute query
    cmd.CommandText = _
        "SELECT [Total Test Timer], [Stage], [Corrected Blowby] " & _
        "FROM " & fileName & " " & _
        "WHERE [Stage] = 1"
    Set rs = cmd.Execute

    'disconnect the record set from the file source
    rs.ActiveConnection = Nothing

    'clean up ADO objects
    Set cmd = Nothing
    If Not con Is Nothing Then
        If con.State = adStateOpen Then con.Close
        Set con = Nothing
    End If

    'return Recordset
    Set getRecordSet = rs

End Function

Вот пример набора данных, где код работает, как ожидалось (Поле, гдевозникает ошибка «Исправленный удар»:

Total Test Timer,Stage,Corrected Blowby
,,LPM
,,SC1Mod4/ai25
1.04167,1,21.85
1.05,1,21.85
1.05833,1,35.48
1.06667,1,35.48
1.075,1,35.48
1.08333,1,35.48
1.09167,1,35.48

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

Total Test Timer,Stage,Corrected Blowby
,,LPM
,,SC1Mod4/ai25
1.025,1,0
1.03333,1,0
1.04167,1,0
1.05,1,0
1.05833,1,21.43
1.06667,1,21.43
1.075,1,21.43

Я пытался привести «Исправлено»Вспыхивающее поле в строку и двойное число:

"SELECT [Total Test Timer], [Stage], cStr([Corrected Blowby]) AS newField " & _

И:

"SELECT [Total Test Timer], [Stage], cDbl([Corrected Blowby]) AS newField " & _

, но ни один не работал. У кого-нибудь есть какие-либо советы о том, как действовать? Спасибо!

...