2013-03-24 2 views
0

Необходимо сравнить две базы данных доступа. Просьба руководствоваться по адресу 1. Как использовать VBA для подключения нескольких баз данных 2. Как динамически выбирать, к какой базе данных следует подключаться 3. как найти совпадение уникально/если не вставить результат в другую таблицу 4. запрос к матчСравнение двух баз данных доступа VBA - Unique Join

First Database (Actually set of database files of same type - date wise) 
(Called Database 1 for easy understanding): 
File Names are : 
2013-03-01.mdb 
2013-03-02.mdb 
2013-03-03.mdb 
Each file will have over a million records - Hence speedy comparison required. 

Fields 
ID RowInfo  Description  Value  Region 


Database 2 : 
2013-03.mdb 
Fields 
Table 1 : InvoiceNumber Value CompanyName  Date  
Table 2 : InvoiceNumber Region 
Table 3- Match Result:InvoiceNumber Value ID RowInfo Description CompanyName Date 
Table 4- Match Result:InvoiceNumber Value ID RowInfo Description CompanyName Date 

для каждого счета-фактуры в database2, Посмотрите в базе данных 1 (в файле, указанном в колонке Дата). найти соответствие в базе данных1 в зависимости от региона и стоимости. В случае, если регион не указан, тогда только на основе значения. В случае, если совпадение не найдено, проверьте также дату + 1 файл. Но должен гарантировать уникальную совпадение. Нет Два счета-фактуры должны соответствовать одному ID (в пределах той же даты) в базе данных1.

Для каждого счета-фактуры, если в DB1 есть уникальное совпадение, вставьте результат в таблицу 3 DB2. Если существует несколько совпадений (более одного идентификатора в DB1 для одного счета-фактуры), тогда вставьте результат в таблицу 4.

ответ

0

повторно: 1. как использовать VBA для подключения несколькими базами данных

В Access можно использовать связанные таблицы (External Data > Import & Link) для управления таблицами, которые находятся в другом файле базы данных. Фактически, многопользовательские базы данных Access должны всегда использовать «разделенный» формат базы данных, где «внутренний» файл содержит таблицы, а «front-end» содержит все остальное (запросы, формы, отчеты и т. Д.). В интерфейсе используются Связанные таблицы для доступа к «реальным» таблицам в фоновом режиме. (Смотрите следующий пункт для того, как VBA вписывается в это.)

Re: 2. как динамически выбрать базу данных для подключения

Ручной метод предполагает использование «Linked Table Manager» в доступе к " point "существующих табличных ссылок на другой файл. Это также может (не удивительно) быть автоматизировано с использованием VBA, если это необходимо, но использование диспетчера связанных таблиц - логическое начало.

Re: 3. Как найти, если матч уникален/и, если не вставить результат в другую таблицу

Если два «таблица назначения» должны иметь точно такую ​​же структуру, то вы должны рассмотреть вопрос о сохранении только одна такая таблица с дополнительным столбцом, чтобы различать содержащиеся в нем записи. В этом случае дополнительный столбец будет похож на [SourceRowCount], где значение = 1 будет соответствовать «Таблице 3», а значение> 1 будет соответствовать «Таблица 4». Вы можете по-прежнему относиться к ним как отдельные "Таблицы" в запросах и отчетах путем создания сохраненных запросов ...

  • имя запроса: [Invoice_unique_match], условие: "WHERE [SourceRowCount] = 1"

  • имя запроса: [Invoice_non_unique_match], условие: «WHERE [SourceRowCount]> 1»

... и до сих пор все записи, доступные в той же таблице, в случае, если есть моменты, когда вы хотите, чтобы выбрать (или агрегат, или отчет) по записям, независимо от их «уникальности», положение дел.

0

Не будет намного проще добавлять связанные таблицы с 2013-03-02. mdb & Базы данных 2013-03-03.mdb в файле 2013-03-01.mdb и поиск связанных таблиц с DLookup?

0
  1. как использовать VBA для подключения несколькими базами данных

Файл -> Get External Data -> таблицы Link

  1. как динамически выбрать базу данных для подключения

Возможно, лучше всего создать запрос, который UNIONs создает таблицы из всех баз данных «База данных 1».

  1. как найти, если матч уникален/и, если не вставить результат в другой таблице

Я думаю, что вы сказали, что ваши критерии совпадения являются:

Для каждого и каждый счет в базе данных2, поиск в базе данных 1 (в файле, указанном в столбце «Дата»). найдите соответствующий ответ в Database1 на основе региона и стоимости. Если регион не указан, то зависит только от значения. Если совпадение не найдено, проверьте также дату + 1 файл . Но должен обеспечить только уникальный матч. Нет двух счетов-фактур должно соответствовать , совпадающим с тем же идентификатором (в пределах той же даты) в базе данных1.

Предложенный код:

INSERT INTO Table3 
WHERE DCOUNT("[InvoiceNumber]", "[big_union_query]", _ 
    "([Region] = " & [Region] & " AND [Value] = " & [Value] & ") OR " & _ 
    "([Region] IS NULL AND [Value] = " & [Value] & ")" _ 
    ) = 1; 

INSERT INTO Table4 
WHERE DCOUNT("[InvoiceNumber]", "[big_union_query]", _ 
    "([Region] = " & [Region] & " AND [Value] = " & [Value] & ") OR " & _ 
    "([Region] IS NULL AND [Value] = " & [Value] & ")" _ 
    ) = 1; 
  1. запрос в соответствии

Есть несколько подходов.

Один написать два INSERT запросов, один для заполнения Таблица 3 и один для заполнения Таблица 4.

Другой подход заключается в написании сценария VBA, который делает большой ВЫБРАТЬ из счетов-фактур в «базе данных 2» , проходит через них и общается с ними один за другим. Подход «один за другим» будет медленным. Накладных расходов много. Но он дает вам этот контроль и позволяет вам отлаживать во время работы.

Смежные вопросы