Приведите тип данных с помощью драйвера odbc excel - PullRequest
1 голос
/ 04 февраля 2011

Я использую драйвер Microsoft Excel для импорта документа Excel в набор adodb.recordset, чтобы можно было удалить дубликаты строк и поместить их в базу данных SQL Server.

В первом столбце есть значения, такие как 192, 13U, JJJ и т. Д., Но по какой-то причине запрос преобразует его в двойное значение, и любые строки с альфа-значениями преобразуются в нуль. Из того, что я могу сказать, это потому, что тип большинства является числовым, а не текстовым.

Я пытался его разыграть, но получил ошибку.

Вот моя функция:

Function Read_Excel(ByVal sFile As String) As ADODB.Recordset
    On Error GoTo fix_err
    Dim rs As ADODB.Recordset
    rs = New ADODB.Recordset
    Dim sconn As String

    rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
    rs.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
    rs.LockType = ADODB.LockTypeEnum.adLockBatchOptimistic

    sconn = "DRIVER=Microsoft Excel Driver (*.xls); ImportMixedTypes=Text; " & "DBQ=" & sFile & ";Extended Properties='Excel 8.0;HDR=No;IMEX=1';"
    rs.Open("SELECT Code, Description FROM [sheet1$]", sconn)
    tot += rs.RecordCount
    rs.Close()
    rs.Open("SELECT Distinct * FROM [sheet1$]", sconn)
    Read_Excel = rs
    rs = Nothing
    Exit Function
fix_err:
    Debug.Print(Err.Description + " " + _
                Err.Source, vbCritical, "Import")
    Err.Clear()
End Function

Есть ли способ легко получить первый столбец в виде текста?

РЕДАКТИРОВАТЬ: Когда я пытаюсь "SELECT cast(RPOCode as varchar(10)), Description FROM [sheet1$]" я получаю эту ошибку
«[Microsoft] [ODBC Excel Driver] Синтаксическая ошибка (отсутствует оператор) в выражении запроса« cast (Code as varchar) ». Поставщик Microsoft OLE DB для драйверов ODBC»
Я пробовал varchar, varchar (10) и text в качестве типов приведения с тем же результатом.

Ответы [ 2 ]

4 голосов
/ 04 февраля 2011

Попробуйте:

 rs.Open("SELECT CStr([Code]), Description FROM [sheet1$]", sconn)

Приведение не доступно в Jet / ACE SQL.

0 голосов
/ 04 февраля 2011

В итоге я попытался использовать строку подключения ACE вместо строки для драйвера Microsoft Excel.

sconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sFile & ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1"";"

и убедился, что там находится часть IMEX = 1.Я не думаю, что драйвер Microsoft Excel правильно использовал расширенные свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...