Microsoft.ACE.OLEDB.12.0当前logging集不支持尝试更新访问时收到的更新错误

我有一个ASP页面,用户将上传一个Excel文件。 文件成功上传后,我想要在REGION选项卡中的行,并将它们插入MS Access 2007表。 下面是我使用的代码,我得到这个错误。 我可以使用Microsoft.ACE.OLEB.12.0提供程序的logging集更新吗? 有一个更好的方法吗? ADODB.Recordset错误“800a0cb3”

当前logging集不支持更新。 这可能是提供者或所选lockingtypes的限制。

Set cnnExcel = Server.CreateObject("ADODB.Connection") cnnExcel.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & strExcelFile & ";" & _ "Extended Properties=" & Chr(34) & "Excel 12.0 Xml;HDR=Yes;IMEX=1" & Chr(34) & ";" Response.Write "Excel connection opened<BR>" ' Load ADO Recordset with Excel Data Set rstExcel = Server.CreateObject("ADODB.Recordset") rstExcel.Open "Select * from [REGION$]", cnnExcel, adOpenStatic Response.Write "Excel Recordset loaded<BR>" ' Open Access Connection Set cnnAccess = Server.CreateObject("ADODB.Connection") cnnAccess.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strAccessFile & ";Persist Security Info=False;" Response.Write "Access connection opened<BR>" Const adOpenStatic = 1 Const adLockOptimistic = 3 Const adCmdText = &H0001 ' Load ADO Recordset with Access Data Set rstAccess = Server.CreateObject("ADODB.Recordset") rstAccess.Open "REGION", cnnAccess, adOpenStatic, adLockOptimistic, adCmdTable Response.Write "Access Recordset loaded<BR>" ' Synchronize Recordsets and Batch Update Do Until rstExcel.EOF ' .AddNew For each field in rstExcel.Fields If field.Name = "% Over/Under" Then rstAccess.AddNew field.Name,0 Else rstAccess.AddNew field.Name,field.Value End If Next rstExcel.MoveNext Loop rstAccess.UpdateBatch 

谢谢Hans,Tim和Remou。 我跟着这个例子使用INSERT INTO将数据写入访问数据库

  ' Open Access Connection Set cnnAccess = Server.CreateObject("ADODB.Connection") cnnAccess.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strAccessFilePath & ";Persist Security Info=False;" cnnAccess.Execute "DELETE * FROM REGION" 'Open Excel Connection Set cnnExcel = Server.CreateObject("ADODB.Connection") cnnExcel.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & strExcelFilePath & ";" & _ "Extended Properties=" & Chr(34) & "Excel 12.0 Xml;HDR=Yes;IMEX=1" & Chr(34) & ";" Response.Write "Excel connection opened<BR>" cnnExcel.Execute "INSERT INTO REGION IN 'C:\inetpub\wwwroot\FolderName\App_Data\AccessFileName.accdb' " & _ "Select col1,col2,col3,col4" & _ "from [REGION$]" ' Clean up cnnExcel.Close Set cnnExcel = Nothing cnnAccess.Close Set cnnAccess = Nothing 

你需要一个不同的游标types – adOpenStatic不支持更新。

http://www.w3schools.com/ado/prop_rs_cursortype.asp

你说:“ …我想要在REGION选项卡中的行,并将其插入到MS Access 2007表 ”。

虽然我不完全了解您的示例代码,但您似乎打开一个logging集的Access表和另一个Excel工作表,然后移动通过Excellogging集并插入( 某事 )每行到Accesslogging集。

如果Accesslogging集是可编辑的(即不是只读的),则可以插入一些内容 。 但是,即使你运行起来了,你仍然会留下一个RBAR(通过Agonizing Row排)方法。 最好使用基于集合的方法,以便将所有工作表行作为单个操作进行导入。

这是一个访问查询模仿我想你想要做的事情。 我的Region工作表有4列数据: % Over/Under ; fld2 ; fld3 ; 和fld4 。 Access REGION表具有与兼容的数据types设置相同的4列。

 INSERT INTO REGION ( [% Over/Under], fld2, fld3, fld4 ) SELECT 0 AS [% Over/Under], fld2, fld3, fld4 FROM [Excel 12.0 Xml;HDR=Yes;IMEX=1;DATABASE=C:\share\Access\regions.xlsx].[Region$]; 

如果可以在Access数据库中获得类似的查询,请更改ASP以打开与Access数据库的ADO连接,然后使用连接Execute INSERT语句。 你的ASP代码比现在简单得多,而且运行速度要快得多。