如何将两个MS ACCESS表导出到一个csv文件而不被覆盖?

rav*_*ary 5 ms-access vba access-vba ms-access-2003

我试图将两个MS Access表导出为一个.csv文件.我无法这样做,我可以将这两个表导出为两个不同的csv文件.我需要将两个表导出到一个csv文件中.两个表都有不同的列数.

表1有以下列

f1, f2, f3, f4, f5
Run Code Online (Sandbox Code Playgroud)

table2有

t1, t2, t3, t4
Run Code Online (Sandbox Code Playgroud)

我试图以这种方式通过vb导入,但无法将两个表附加到此查询中.我尝试以下列方式导入

DoCmd.TransferText acExportDelim, , "table1", "t1.csv", True

DoCmd.TransferText acExportDelim, , "table2", "t1.csv", False
Run Code Online (Sandbox Code Playgroud)

但我只获取table2记录的文件.我无法将两个表附加到一个导出查询中,以便我可以获得所需的结果

从table1我只想要标题和table2我只需要导出数据.在MS Access中有什么办法我可以从table1获取头文件,从table2获取记录到一个csv文件

Ada*_*ips 4

好问题!很多时候我会先创建一个查询,其中包含所有输出,就像我在最终输出文件中想要的那样。然后,我将使用单个DoCmd.TransferText命令将查询输出到 CSV 文件。

如果要将两个表中的数据连接在一起,您将使用所谓的联合查询。创建起来可能会有点混乱,因为您需要自己输入 SQL,而不是在可视化查询编辑器中拖放。但一旦你掌握了它的窍门,它并不像看起来那么复杂。

我将在这里做出一些假设,并给你一个例子来说明它是如何运作的。假设table1只有一行,这些是您想要在输出文件中出现的标题:

select f1 as t1, f2 as t2, f3 as t3, f4 as t4, f5 as t5
from table1
union select t1, t2, t3, t4, '' as t5
from table2
Run Code Online (Sandbox Code Playgroud)

关键因素是我们在此联合查询中合并在一起的两个表都使用相同的列名。这就是我们使用f1 as t1. 这使得该f1列用作t1其列名(通常称为别名)。

另请注意,在 中table2,我们没有t5列,因此我们只使用一个空字符串并将其别名为t5。这允许列与我们在 中的内容相匹配table1,即使table2该列没有数据。

当您查看此查询时,您会注意到标题行位于查询结果中的随机位置。我们希望确保它最终成为查询中的顶行,因此让我们添加另一列,以便我们可以对结果进行排序并将标题强制到顶行。

select f1 as t1, f2 as t2, f3 as t3, f4 as t4, f5 as t5, 0 as mysort
from table1
union select t1, t2, t3, t4, '' as t5, 1 as mysort
from table2
order by mysort;
Run Code Online (Sandbox Code Playgroud)

美丽的!现在标题位于顶行!现在我们可以运行导出命令,并将结果转储到 CSV 文件中:

DoCmd.TransferText acExportDelim,,"qryExample","myfile.csv", False
Run Code Online (Sandbox Code Playgroud)

如果您不希望输出文件中出现排序顺序列,则只需将联合查询嵌套在另一个mysort不包含该列的查询中即可。

希望这可以帮助!