Microsoft Excel VBA подключиться к нескольким БД Microsoft Access - PullRequest
0 голосов
/ 30 сентября 2018

В настоящее время я пытаюсь подключиться к 2 отдельным .mdb файлам и выполнить INNER JOIN.

Итак, у меня есть 2 .mdb (Sample1.mdb & Sample2.mdb).Оба защищены паролем.

Когда я пытался подключиться, он показал ошибку, сообщающую, что "it's already opened exclusively by another user, or you need permission...".

Произошла ли ошибка, потому что я не вставил свойство password в это утверждение?Если да, как мне вставить свойство password в это утверждение?

[Excel 8.0;HDR=YES;IMEX=2;DATABASE=" & Application.ActiveWorkbook.Path & "\Sample1.mdb]?

Вот весь мой пример кода:

Dim Conn As ADODB.Connection
Dim resultSet As ADODB.Recordset

Set Conn = New ADODB.Connection

sqlStatement = "SELECT * FROM [Excel 8.0;HDR=YES;IMEX=2;DATABASE=" &
Application.ActiveWorkbook.Path & "\Sample1.mdb].[SampleData$] a INNER JOIN 
[Excel 8.0;HDR=YES;IMEX=2;DATABASE=" & Application.ActiveWorkbook.Path &
"\Sample2.mdb].[SampleInfo$] b ON a.Index = b.Index WHERE a.idCode = 2"

     With Conn
            .Provider = "Microsoft.ACE.OLEDB.12.0"
            .ConnectionString = Application.ActiveWorkbook.Path + "\Sample2.mdb"
            .Properties("Jet OLEDB:Database Password") = "password"
            .Open

             Set resultSet = .Execute(sqlStatement)
         End With

1 Ответ

0 голосов
/ 30 сентября 2018

В этом есть некоторые странные вещи.

  1. [Excel 8.0;HDR=YES;IMEX=2; - строка подключения для подключения к файлам Excel, а не к базам данных MDB.Поскольку вы передаете ему базу данных MDB в качестве параметра, неизбежно возникают странные ошибки.Поскольку подключение к Access является родным для Access, вам просто нужно указать путь.
  2. Я бы указал все параметры подключения в строке подключения, включая uid.
Dim Conn As ADODB.Connection
Dim resultSet As ADODB.Recordset

Set Conn = New ADODB.Connection

sqlStatement = "SELECT * FROM [" &
Application.ActiveWorkbook.Path & "\Sample1.mdb].[SampleData$] a INNER JOIN [SampleInfo$] b ON a.Index = b.Index WHERE a.idCode = 2"

     With Conn
            .Provider = ""
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source="Application.ActiveWorkbook.Path + "\Sample2.mdb;Jet OLEDB:Database Password=""password"""
            .Open
             Set resultSet = .Execute(sqlStatement)
         End With

Чтобы запросить базу данных Access с помощью пароля, укажите пароль в строке подключения ISAM:

"SELECT * FROM [MS Access;PWD=password;DATABASE=" &
Application.ActiveWorkbook.Path & "\Sample1.mdb].[SampleData$] a INNER JOIN 
[MS Access;PWD=password;DATABASE=" & Application.ActiveWorkbook.Path &
"\Sample2.mdb].[SampleInfo$] b ON a.Index = b.Index WHERE a.idCode = 2"

Конечно, вам необходимо убедиться, что вы используете правильные строки подключения для обеих баз данных MDB: с текущейкод, Sample2 защищен, а Sample1 - нет, а Sample2 защищен шифрованием (только запрашивает пароль), а не безопасностью на уровне пользователя (запрашивает пароль и имя пользователя).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...