2011-02-04 2 views
1

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

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

Я попробовал его, но получил ошибку.

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

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 

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

EDIT: Когда я пытаюсь "SELECT cast(RPOCode as varchar(10)), Description FROM [sheet1$]" я получаю эту ошибку
«[Microsoft] [ODBC Excel Driver] Синтаксическая ошибка (отсутствующий оператор) в выражении запроса 'отливать (код в VARCHAR)' Microsoft OLE DB Provider для ODBC. Драйверы "
Я пробовал varchar, varchar (10) и текст как типы литья с тем же результатом.

+1

** WHAT ** погрешность вы получили?!?! Мы не читатели разума - вам нужно сообщить нам об этом! –

+0

«[Microsoft] [драйвер Excel ODBC] Синтаксическая ошибка (отсутствующий оператор) в выражении запроса« cast (Code as varchar) ». Microsoft OLE DB Provider для драйверов ODBC» Я пробовал varchar и текст как типы литья. – AndyD273

ответ

4

Try:

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

Cast не доступен в Jet/ACE SQL.

+0

Это избавляет от ошибки, но вместо Null я просто получаю пустую строку, например, она преобразует Null в строку. – AndyD273

+0

Эта часть о ACE помогла мне разобраться. Я помню, что видел это на http://www.connectionstrings.com/excel, но не думал попробовать. – AndyD273

0

Я закончил попытку строки подключения 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 правильно использовал расширенные свойства.

Смежные вопросы