2011-02-04 74 views
1

我正在使用Microsoft Excel驅動程序將Excel文檔導入adodb.recordset,以便我可以刪除重複的行並將其放入SQL Server數據庫中。使用odbc excel驅動程序投射數據類型

第一列的值爲192,13U,JJJ等,但由於某些原因查詢會將其轉換爲雙精度值,並且具有alpha值的任何行都將轉換爲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 

有沒有辦法輕鬆獲得第一列的文字?

編輯:當我嘗試"SELECT cast(RPOCode as varchar(10)), Description FROM [sheet1$]"我得到這個錯誤
「[微軟] [ODBC Excel驅動程序]語法錯誤(缺少操作員)在查詢表達式 '投(代碼爲varchar)' Microsoft OLE DB提供程序的ODBC。驅動程序「
我試着varchar,varchar(10)和文本作爲鑄造類型具有相同的結果。

+1

**你得到了什麼**錯誤?!?!我們不是心靈讀者 - 你需要讓我們知道! – 2011-02-04 16:34:30

+0

「[Microsoft] [ODBC Excel驅動程序]在查詢表達式'cast(Code as varchar)'中的語法錯誤(缺少運算符)'我試過varchar和text作爲鑄造類型。 – AndyD273 2011-02-04 16:48:23

回答

4

嘗試:

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

演員是不是在噴氣/ ACE SQL可用。

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驅動程序正確地使用擴展屬性。