Ich versuche, eine dynamische Client-Excel-Datei (en) zu erstellen, die mit einer Master-Excel-Datei "Server" verknüpft ist.VBA ADO Aktualisierungsabfrage
Ziel ist es, alle Daten in jeder der Dateien aktualisiert zu halten. Grundsätzlich, wenn die Client-Datei geöffnet ist, habe ich ein Update von der Master-Datei, und ich möchte dann die Master-Datei entsprechend jeder Änderung in der Client-Datei aktualisiert werden.
Ich kann Daten mit SELECT sehr leicht erhalten, aber Update-Abfrage wird nicht funktionieren. Hier ist ein Teil des Codes:
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
Als ich die kommentierten SQL-Abfrage ausführen, um die Spalte ‚Col‘ zu aktualisieren, um ‚3 ‘ es perfekt aber funktioniert, wenn ich versuche, das zu aktualisieren verwenden Wählen Sie aus der Master-Datei ich folgende Fehlermeldung
Betrieb eine aktualisierbare Abfrage
UPDATE bekommen verwenden müssen: ich denke, das eigentliche Problem ist da:
Ich habe Fragen zu dem Thema gelesen, aber jede funktionierte für mich. In der Tat Wenn ich 'ReadOnly = False' in meiner Verbindungszeichenfolge gesetzt habe, bekomme ich den folgenden Fehler 'Pilote ISAM introuvable' ('ISAM-Treiber nicht gefunden).
UPDATE 2: ISAM Treiberfehler wird angezeigt, wenn die Verbindungszeichenfolge nicht korrekt ist. (zB: eine schlechte Excel-Versionsnummer). Die ReadOnly = False (oder Mode = 'Freigabe verweigern Write') ist erforderlich, so ist die innere Verknüpfung.
Ich habe das bereits manuell erreicht, indem ich eine Verbindung zur Master-Datei in Excel-Verbindung hinzufüge, also weiß ich, dass dies möglich sein sollte.
Dank
Wie gesagt, wenn ich die 'readonly = false' der Verbindungszeichenfolge hinzufüge, wird ein Fehler ausgegeben. Ich werde versuchen, die Tabellen – Lich4r
versuchen, meine Verbindungszeichenfolge? –
Das Problem ist, dass Sheet2 in einer anderen Arbeitsmappe ist. So sagt das Programm, dass es es nicht findet. Wie füge ich ein "FROM" in die Update-Syntax ein? Und "ReadOnly = False" löst dieselbe Fehlermeldung aus: "Pilote ISAM introuvable" – Lich4r