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

时间:2014-10-08 07:29:39

标签: vba ms-access access-vba ms-access-2003

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

表1有以下列

f1, f2, f3, f4, f5

table2正在

t1, t2, t3, t4

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

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

DoCmd.TransferText acExportDelim, , "table2", "t1.csv", False

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

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

1 个答案:

答案 0 :(得分:3)

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

如果要将两个表中的数据连接在一起,您将使用所谓的 Union Query 。这可能会让您更难以创建,因为您需要自己键入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

关键因素是我们在此联合查询中合并的两个表都使用相同的列名。这就是我们使用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;

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

DoCmd.TransferText acExportDelim,,"qryExample","myfile.csv", False

如果您不想要输出文件中的排序顺序列,那么只需将联合查询嵌套在另一个不包含mysort列的查询中。

希望这有帮助!