使用odbc excel驱动程序投射数据类型
问题描述:
我正在使用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)和文本作为铸造类型具有相同的结果。
答
尝试:
rs.Open("SELECT CStr([Code]), Description FROM [sheet1$]", sconn)
演员是不是在喷气/ ACE SQL可用。
答
我结束了尝试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驱动程序正确地使用扩展属性。
**你得到了什么**错误?!?!我们不是心灵读者 - 你需要让我们知道! – 2011-02-04 16:34:30
“[Microsoft] [ODBC Excel驱动程序]在查询表达式'cast(Code as varchar)'中的语法错误(缺少运算符)'我试过varchar和text作为铸造类型。 – AndyD273 2011-02-04 16:48:23