Sql server 使用ACE SQL server从Excel 2010文件中读取超过254列
我正在使用连接字符串Sql server 使用ACE SQL server从Excel 2010文件中读取超过254列,sql-server,vba,excel,Sql Server,Vba,Excel,我正在使用连接字符串 szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & fpath & fname & ";" & _ "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";" Set rsData = New ADODB.Recordset 'Run the query as adCmdText rsData.Ope
szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & fpath & fname & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";"
Set rsData = New ADODB.Recordset
'Run the query as adCmdText
rsData.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
'Check if data exists for query
If Not rsData.EOF Then
rtnArr = rsData.GetRows 'if the recordset contains data populate the array
Else
dEmp = True 'no data flag true
ReDim rtnArr(0 To 0, 0 To 0)
End If
从外部Excel 2010文件在VBA中运行SQL查询。该文件有40多个工作表,每个工作表大约有369列宽,根据SQL server的限制,SQL目前只返回前255列数据。许多讨论此问题的论坛建议将工作簿转换为平面(.csv),但这并不理想。有人有其他的解决办法吗?还是一种强行穿过额外柱子的方法
谢谢 ADO在连接到Excel时限制为255个字段。(有关限制,请参阅-ACE/JET/Access是复杂关联的) 最好是尝试以excel文件的形式打开excel文件,然后读取单元格以创建insert语句
Dim xlApp As Object
Dim OWorkbook As Object
Set xlApp = CreateObject("Excel.Application")
Set OWorkbook = xlApp.workbooks.Open("MyFile.xlsx")
With OWorkbook.Worksheets(1)
c1 = .Cells(RowCount, 1).value
...
c290 = .Cells(RowCount, 290).value
然后构造插入
strInsertSQL = "INSERT INTO [MyDB].[dbo].[MyTable] ([Val1],[Val2],...,[Val290])"
strSQLValues = " VALUES (" & c1 & ", '" & c2 & "'," & ... & c290 & ")"
cmd.ActiveConnection = "Provider=SQLNCLI11;Server=MyServer;Database=MyDB"
cmd.CommandText = strInsertSQL & strSQLValues
cmd.CommandTimeout = 0
cmd.Execute 'strInsertSQL & strSQLValues
根据需要增加
RowCount
行数谢谢,但这对我不起作用。。也许是因为我代码的另一部分?我将编辑这个问题以包含更多细节。ADO是一个接口,而不是SQL引擎。OP使用ADO连接到ACE/JET引擎(Window.dll文件),Excel/Access和其他窗口程序可以连接到该引擎。此SQL引擎的列数限制为255。但是,如果OP直接连接到SQL Server、Oracle、DB2,仍然使用ADO,则不应出现这样的列限制。@Parfait,通过ADO连接到Excel,这确实会受到255个字段的限制。我知道ADO到SQL server有1024个字段的限制,但是SQL server不是数据源,这里没有SQL server连接。您正在连接到工作簿源。虽然ACE/JET引擎(用于MS Office/Windows产品)的列数限制为255,但SQL Server没有,如果通过ADO直接连接到MSSQL,则所有数据都应返回。