ADO 错误信息
ADO error message
我在尝试从另一个 excel table 更新另一个 excel table 时收到一条错误消息(并且已关闭)。
该错误仅在 源工作簿不是 .xls 格式时出现。
You cannot edit this field because it resides in a linked Excel spreadsheet. The ability to edit data in a linked Excel spreadsheet has been disabled in this Access Release.
这应该是使用 Access 时的 expected behavior。
- 为什么我会看到这个错误,因为我没有使用 Access,而是只有两个 Excel 文件,并且使用的是比 2007 更新的版本?
- 这个功能如何improve security?
- 我的情况有解决方法吗?除了在我的目标工作簿中使用临时 table。
更新:代码示例
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
谢谢
这是三个问题合二为一的问题,但我会尽力回答所有问题:
- 据我所知,它不依赖于 Access 或 Excel,而是依赖于 Microsoft Access OLEDB 提供程序。您可以尝试使用 Microsoft Excel ODBC 驱动程序
使用 ODBC 连接
- 一个 Stack Overflow 回答者说这是出于安全原因,这不是一个很好的消息来源。我怀疑这是出于安全原因。
- 有很多。如果你告诉我们你到底想做什么,我可以更具体。
我在尝试从另一个 excel table 更新另一个 excel table 时收到一条错误消息(并且已关闭)。 该错误仅在 源工作簿不是 .xls 格式时出现。
You cannot edit this field because it resides in a linked Excel spreadsheet. The ability to edit data in a linked Excel spreadsheet has been disabled in this Access Release.
这应该是使用 Access 时的 expected behavior。
- 为什么我会看到这个错误,因为我没有使用 Access,而是只有两个 Excel 文件,并且使用的是比 2007 更新的版本?
- 这个功能如何improve security?
- 我的情况有解决方法吗?除了在我的目标工作簿中使用临时 table。
更新:代码示例
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
谢谢
这是三个问题合二为一的问题,但我会尽力回答所有问题:
- 据我所知,它不依赖于 Access 或 Excel,而是依赖于 Microsoft Access OLEDB 提供程序。您可以尝试使用 Microsoft Excel ODBC 驱动程序 使用 ODBC 连接
- 一个 Stack Overflow 回答者说这是出于安全原因,这不是一个很好的消息来源。我怀疑这是出于安全原因。
- 有很多。如果你告诉我们你到底想做什么,我可以更具体。