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)错误

SQL 参数和 int 值

EF Oracle:错误 175

鸿业使用中缺ADO组件

必须声明标量变量错误 ADO.NET