ADO 错误信息
Posted
技术标签:
【中文标题】ADO 错误信息【英文标题】:ADO error message 【发布时间】:2017-10-29 14:50:57 【问题描述】:我在尝试从另一个(已关闭)工作簿中的另一个 Excel 表更新一个 Excel 表时收到错误消息。 仅当源工作簿不是 .xls 格式时才会出现该错误。
您无法编辑此字段,因为它位于链接的 Excel 电子表格中。在此 Access 版本中,编辑链接的 Excel 电子表格中的数据的功能已被禁用。
在使用 Access 时,这应该是 expected behavior。
-
为什么我会看到此错误,因为我使用的不是 Access,而是只有两个 Excel 文件,并且版本比 2007 更新?
improve security 这个功能如何?
在我的情况下有解决方法吗?除了在我的目标工作簿中使用临时表。
更新:代码示例
Sub GetFiles()
'Take !M sheet to create files and their informations
Dim Base As FichierSource
'----------------------------
'Create files object
'----------------------------
'Fichier Source
Base.Path = "C:\Users\Lichar\Documents\SQL TEST\Base.xlsx"
Base.SourceSheet = "Data"
Base.TargetSheet = "Base"
Base.Columns = "*"
Base.Filter = "WHERE [Base$].id = [Data$].id"
Base.Name = "Base.xlsx"
'---------------------------
'Launch queries
'---------------------------
With Base
Call UPDATEQUERY(.Path, .SourceSheet, .TargetSheet, .Columns, .Filter)
End With
End Sub
Sub UPDATEQUERY(SourcePath As String, SourceSheet As String, TargetSheet As String, _
Columns As String, Filter As String)
Dim Cn As ADODB.Connection
Dim QUERY_SQL As String
Dim CHAINE_HDR As String
Dim STRCONNECTION As String
CHAINE_HDR = "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=5;Extended Properties='HDR=YES;'] "
Set Cn = New ADODB.Connection
QUERY_SQL = _
"UPDATE [" & TargetSheet & "$] INNER JOIN (SELECT * FROM [" & SourceSheet & "$] " & _
"IN '" & SourcePath & "' " & CHAINE_HDR & ") t2 " & _
"ON [" & TargetSheet & "$].id = t2.id " & _
"SET [" & TargetSheet & "$].ColA = t2.ColA "
STRCONNECTION = _
"Driver=Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb);" & _
"DriverId=790;" & _
"Dbq=" & ThisWorkbook.FullName & ";" & _
"DefaultDir=" & ThisWorkbook.FullName & ";ReadOnly=False;"
Cn.Open STRCONNECTION
Cn.Execute (QUERY_SQL)
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End Sub
谢谢
【问题讨论】:
【参考方案1】:这是三个问题,但我会尽力回答所有问题:
-
据我所知,它不依赖于 Access 或 Excel,而是依赖于 Microsoft Access OLEDB 提供程序。您可以尝试通过 Microsoft Excel ODBC 驱动程序使用 ODBC 连接
一个 Stack Overflow 回答者说这是因为安全原因并不是一个好的来源。我怀疑是出于安全原因。
有很多。如果你告诉我们你想做什么,我可以更具体。
【讨论】:
我有点迷失在所有这些供应商、驱动程序中。我应该如何使用 ODBC 驱动程序?这是我想要实现的目标的question。 您没有提供任何代码,因此我无法调整您的代码以使用 ODBC 驱动程序。请提供您自己的,我不喜欢从其他问题中复制粘贴(作者身份原因) 您需要更具体地设置您的设置,使用此代码(至少大部分代码),我可以在一个简单的工作表上执行更新查询。请注意,您无法通过在链接的单元格/工作表上使用更新查询来编辑链接数据(表达式、链接的工作表),您应该在源处编辑这些数据 添加了上述例程。如您所见,源位于外部 wb 中。这些表格是用随机值填充的示例表格(没有公式,没有链接)。请注意,如果源文件 (Base) 是 .xls 格式,我可以进行此更新。我想从 .xlsx et .xlsm 文件中实现更新 啊。我相信 IN 子句使您的查询不可更新。或者是 JOIN,在没有索引的表(例如 Excel 工作表)上使用 JOIN 会使表不可更新。以上是关于ADO 错误信息的主要内容,如果未能解决你的问题,请参考以下文章
ADO.NET 连接错误“System.Data.OleDb.OleDbException”
在Access中运行ADO程序出错,运行时错误 '-2147024769(8007007f)' 自动化(Automation)错误