0

需要比较两个访问数据库。请指导 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 中的每个 Invoice,在数据库 1 中查找(在 Date 列中指定的文件中)。根据 Region 和 Value 在 Database1 中找到对应的匹配项。如果未提及区域,则仅基于值。如果未找到匹配项,请同时检查 Date+1 文件。但必须确保唯一匹配。没有两个 InvoiceNumber 应该与 Database1 中的相同 ID(在相同日期内)匹配。

对于每个 Invoice ,如果 DB1 中存在唯一匹配,则将结果插入 DB2 的表 3。如果有多个匹配项(单个 Invoice 的 DB1 中有多个 ID),则将结果插入表 4。

4

3 回答 3

0

在 2013-03-01.mdb 文件中添加来自 2013-03-02.mdb 和 2013-03-03.mdb 数据库的链接表并使用 DLookup 搜索链接表不是更简单吗?

于 2013-03-25T09:02:19.500 回答
0
  1. 如何使用VBA连接多个数据库

文件 -> 获取外部数据 -> 链接表

  1. 如何动态选择要连接的数据库

最好创建一个查询,将所有“数据库 1”数据库中的表联合起来。

  1. 如何查找匹配是否唯一/如果不将结果插入不同的表

我想你说你的匹配标准是:

对于 Database2 中的每个 Invoice,在数据库 1 中查找(在 Date 列中指定的文件中)。根据 Region 和 Value 在 Database1 中找到对应的匹配项。如果未提及区域,则仅基于值。如果未找到匹配项,请同时检查 Date+1 文件。但必须确保唯一匹配。没有两个 InvoiceNumber 应该与 Database1 中的相同 ID(在相同日期内)匹配。

建议代码:

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”中的发票执行大 SELECT,遍历它们,并逐个处理它们。“一对一”的方法会很慢。有很多开销。但它为您提供了控制权并允许您在运行时进行调试。

于 2013-03-25T21:42:19.880 回答
0

re: 1.如何使用VBA连接多个数据库

在 Access 中,您可以使用链接表 ( External Data > Import & Link) 来操作驻留在另一个数据库文件中的表。事实上,多用户 Access 数据库应始终使用“拆分”数据库格式,其中“后端”文件包含表,“前端”包含其他所有内容(查询、表单、报告等)。前端使用链接表来访问后端的“真实”表。(有关 VBA 如何适应这一点,请参阅下一点。)

re: 2.如何动态选择连接哪个数据库

手动方法涉及使用 Access 中的“链接表管理器”将现有表链接“指向”到不同的文件。如有必要,这也可以(毫不奇怪)使用 VBA 自动化,但使用链接表管理器是合乎逻辑的起点。

回复:3.如何查找匹配是否唯一/如果不将结果插入不同的表

如果两个“目标表”具有完全相同的结构,那么您应该考虑只维护一个这样的表,其中包含一个额外的列来区分它包含的记录。在这种情况下,额外的列将类似于 [SourceRowCount],其中值 =1 对应于“表 3”,值 >1 对应于“表 4”。您仍然可以通过创建保存的查询将它们视为查询和报告中的单独“表”......

  • 查询名称:[Invoice_unique_match],条件:“WHERE [SourceRowCount]=1”

  • 查询名称:[Invoice_non_unique_match],条件:“WHERE [SourceRowCount]>1”

...并且仍然在同一个表中提供所有记录,以防有时您想要选择(或聚合或报告)记录,而不管它们的“唯一性”状态如何。

于 2013-03-25T22:09:47.687 回答