【发布时间】:2017-10-27 09:34:15
【问题描述】:
我正在尝试创建一个链接到“服务器”主 excel 文件的动态客户端 excel 文件。
目标是更新每个文件中的所有数据。基本上,当打开客户端文件时,我会从主文件中获得更新,然后我想根据客户端文件中所做的每一次更改来更新主文件。
我可以很容易地使用 SELECT 获取数据,但更新查询不起作用。 以下是部分代码:
Option Explicit
Private Type FichierSource
'Objet Fichier source.
Path As String
SourceSheet As String
TargetSheet As String
Columns As String
Filter As String
Name As String
End Type
Sub GetFiles()
'Take !M sheet to create files and their informations
Dim Base As FichierSource
'----------------------------
'Create files object
'----------------------------
'Fichier Source
Base.Path = "U:\Macros\SQL\Base.xlsx"
Base.SourceSheet = "DATA"
Base.TargetSheet = "Base2"
Base.Columns = "*"
Base.Filter = ""
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
Dim i As Long
CHAINE_HDR = "[Excel 12.0 Macro;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='HDR=YES;'] "
Set Cn = New ADODB.Connection
QUERY_SQL = _
"UPDATE [" & TargetSheet & "$] SET [Col] = (SELECT [Col] FROM [" & SourceSheet & "$] " & _
"IN '" & SourcePath & "' " & CHAINE_HDR & Filter & ")"
STRCONNECTION = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source='" & ThisWorkbook.FullName & "';" & _
"Extended Properties=""Excel 12.0 Macro;"";"
' QUERY_SQL = _
' "UPDATE [" & TargetSheet & "$] SET " & _
' "[Col] = '3'"
'MsgBox (QUERY_SQL)
Cn.Open STRCONNECTION
Cn.Execute (QUERY_SQL)
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End Sub
当我执行注释的 Sql Query 以便将列 'Col' 更新为 '3 ' 它运行良好,但是当我尝试使用主文件中的 SELECT 进行更新时,出现以下错误
操作必须使用可更新的查询
更新:我认为真正的问题在那里:
我已阅读有关该主题的问题,但任何问题都对我有用。确实如果我在连接字符串中设置“ReadOnly=False”,我会收到以下错误“Pilote ISAM introuvable”(“找不到 ISAM 驱动程序”)。
更新 2:只要连接字符串不正确,就会弹出 ISAM 驱动程序错误。 (例如:坏的 excel 版本号)。 需要 ReadOnly=False(或 Mode='Share Deny Write'),内连接也是如此。
我已经通过在 excel 连接中添加到主文件的连接手动实现了所有这些,所以我知道这应该是可能的。
谢谢
【问题讨论】: