使用odbc excel驱动程序input数据types
我正在使用Microsoft Excel驱动程序将Excel文档导入adodb.recordset,以便我可以删除重复的行并将其放入SQL Server数据库。
第一列的值是192,13U,JJJ等,但由于某些原因,查询会将其转换为double值,并且具有alpha值的任何行都将转换为Null。 从我可以告诉这是因为多数types是数字而不是文本。
我试着把它,但有一个错误。
这是我的function:
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驱动程序的Microsoft OLE DB提供程序”中的[Microsoft] [ODBC Excel驱动程序]语法错误(缺less运算符)在查询expression式“cast(Code as varchar)
我已经尝试varchar,varchar(10)和文本作为铸造types具有相同的结果。
尝试:
rs.Open("SELECT CStr([Code]), Description FROM [sheet1$]", sconn)
Cast在Jet / ACE SQL中不可用。
我结束了尝试ACE连接string而不是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驱动程序正确使用扩展属性。