В 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 " & _
, но ни один не работал. У кого-нибудь есть какие-либо советы о том, как действовать? Спасибо!