|
|||||||
Запрос обновления VBA ADO
Время создания: 08.03.2020 01:30
Текстовые метки: VBA,ADO, Update, ISAM
Раздел: Разные закладки - VBA - Access - ADO
Запись: xintrea/mytetra_db_adgaver_new/master/base/1583620211f7cj620luf/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Запрос обновления VBA ADO 0 Lich4r [2017-10-27 12:34:00] Я пытаюсь создать динамический файл excel клиента, который связан с файлом master файла "server". Цель состоит в том, чтобы все данные обновлялись в каждом из файлов. В основном, когда клиентский файл открыт, у меня есть обновление из главного файла, и затем я хочу обновить главный файл в соответствии с каждым изменением, сделанным в файле клиента. Я могу получить данные с помощью 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" в моей строке подключения, я получаю следующую ошибку: "Pilot ISAM introuvable" ("Драйвер ISAM не найден"). ОБНОВЛЕНИЕ 2: Ошибка драйвера ISAM появляется, когда строка подключения неверна. (например: плохой номер версии excel). Требуется ReadOnly = False (или Mode = 'Share Deny Write'), так же как и внутреннее соединение. Я уже достиг всего этого вручную, добавив соединение с основным файлом в excel-соединении, поэтому я знаю, что это должно быть возможно. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|