MyTetra Share
Делитесь знаниями!
Запрос обновления 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-соединении, поэтому я знаю, что это должно быть возможно.

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования