0

2つのアクセスデータベースを比較する必要があります。1.VBAを使用して複数のデータベースを接続する方法2.接続するデータベースを動的に選択する方法3.一致が一意であるかどうかを確認する方法/一致しない場合は別のテーブルに結果を挿入する方法4.一致するクエリ

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([日付]列で指定されたファイル)を検索します。地域と値に基づいて、Database1で対応する一致を検索します。地域が言及されていない場合は、値のみに基づいています。一致するものが見つからない場合は、Date+1ファイルも確認してください。ただし、一意の一致のみを確認する必要があります。Database1の同じID(同じ日付内)に一致する2つのInvoiceNumberはありません。

請求書ごとに、DB1に一意の一致がある場合は、結果をDB2の表3に挿入します。一致するものが複数ある場合(単一の請求書の場合、DB1に複数のIDがある場合)、結果を表4に挿入します。

4

3 に答える 3

0

2013-03-02.mdbおよび2013-03-03.mdbデータベースから2013-03-01.mdbファイルにリンクされたテーブルを追加し、DLookupを使用してリンクされたテーブルを検索する方がはるかに簡単ではないでしょうか。

于 2013-03-25T09:02:19.500 に答える
0
  1. VBAを使用して複数のデータベースに接続する方法

[ファイル]->[外部データの取得]->[リンクテーブル]

  1. 接続するデータベースを動的に選択する方法

すべての「データベース1」データベースのテーブルをUNIONするクエリを作成するのがおそらく最善です。

  1. 一致が一意であるかどうかを確認する方法/一致しない場合は別のテーブルに結果を挿入する

一致基準は次のとおりです。

Database2のすべての請求書について、データベース1([日付]列で指定されたファイル)を検索します。地域と値に基づいて、Database1で対応する一致を検索します。地域が言及されていない場合は、値のみに基づいています。一致するものが見つからない場合は、Date+1ファイルも確認してください。ただし、一意の一致のみを確認する必要があります。Database1の同じID(同じ日付内)に一致する2つのInvoiceNumberはありません。

推奨コード:

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. 一致するクエリ

いくつかのアプローチがあります。

1つは、2つのINSERTクエリを作成することです。1つは表3に入力し、もう1つは表4に入力します。

もう1つのアプローチは、「データベース2」の請求書から大きなSELECTを実行し、それらを繰り返し処理して1つずつ処理するVBAスクリプトを作成することです。「1つずつ」のアプローチは遅くなります。オーバーヘッドがたくさんあります。しかし、それはあなたにその制御を与え、あなたが実行中にデバッグすることを可能にします。

于 2013-03-25T21:42:19.880 に答える
0

再:1。複数のデータベースを接続するためにVBAを使用する方法

Accessでは、リンクテーブル(External Data > Import & Link)を使用して、別のデータベースファイルにあるテーブルを操作できます。実際、マルチユーザーAccessデータベースは、常に「分割」データベース形式を使用する必要があります。この形式では、「バックエンド」ファイルにテーブルが含まれ、「フロントエンド」にその他すべて(クエリ、フォーム、レポートなど)が含まれます。フロントエンドはリンクテーブルを使用して、バックエンドの「実際の」テーブルにアクセスします。(VBAがこれにどのように適合するかについては、次のポイントを参照してください。)

re:2.接続するデータベースを動的に選択する方法

手動の方法では、Accessの「LinkedTable Manager」を使用して、既存のテーブルリンクを別のファイルに「ポイント」します。これは(当然のことながら)必要に応じてVBAを使用して自動化することもできますが、LinkedTableManagerを使用することから始めるのが論理的です。

re:3.一致が一意であるかどうかを確認する方法/一致しない場合は別のテーブルに結果を挿入する方法

2つの「宛先テーブル」がまったく同じ構造を持つ場合は、含まれるレコードを区別するために、追加の列を持つそのようなテーブルを1つだけ維持することを検討する必要があります。この場合、追加の列は[SourceRowCount]のようになり、値= 1は「表3」に対応し、値>1は「表4」に対応します。保存されたクエリを作成することで、クエリとレポートでそれらを別々の「テーブル」として扱うことができます。

  • クエリ名:[Invoice_unique_match]、条件: "WHERE [SourceRowCount] = 1"

  • クエリ名:[Invoice_non_unique_match]、条件: "WHERE [SourceRowCount]> 1"

...また、「一意性」ステータスに関係なく、レコードを選択(または集計、レポート)する場合に備えて、すべてのレコードを同じテーブルで使用できます。

于 2013-03-25T22:09:47.687 に答える