2013-03-20 95 views
2

我有一个.csv文件,我从我们的会计软件中导出。最终目标是通过附加记录将“部分”数据导入到Access 2010数据库表中。我的问题是,我需要某种设备来从.csv文件中仅选择选择字段并对这些字段进行格式设置(定义数据类型),以便我能够将“新”格式的.csv导入到Access中,附加到现有表,没有任何错误。使用宏格式化csv文件

我们的会计软件确实允许从他们的数据文件具体领域要出口,但它是一个繁琐的过程,并可能存在许多机会,由客户服务部的错误。我需要尽可能使这个“防白痴”!

+1

您可以先将它转移到excel中,删除不需要的列,然后将excel电子表格导出回csv? – 2013-03-20 20:31:44

+0

你有试过什么吗?如果是这样,请提供您的代码。如果没有,请尝试解决这个问题,我们可以进一步帮助你解决你遇到的问题。如果没有某种样本数据来定义你所指的“选择领域”,也很难提供帮助。 – Sam 2013-03-20 20:34:01

+0

我在Excel中尝试了从文本导入功能。我想要做的是自动化我能够手动实现的,可能是通过使用某种宏。 – prayingmantes 2013-03-20 20:42:38

回答

1

使用查询将CSV数据直接导入到Access表中。

的查询将可以很容易地选择可用CSV字段的子集。并且查询可以包含用于转换CSV值以与Access目标字段数据类型兼容的函数。

INSERT INTO tblFromCSV (FK_ID, CD, [TIMESTAMP], ts_as_datetime) 
SELECT 
    CLng(csv.FK_ID), 
    UCase(csv.CD), 
    csv.TIMESTAMP, 
    CDate(csv.ts_as_datetime) 
FROM [Text;HDR=yes;Database=C:\share\Access\].[sample.csv] AS csv; 

在SQL,INSERT INTO tblFromCSV (<here>)的第一行中列出的字段名称,是将存储的数据导入Access表字段的名称。如果您为所有表格字段提供值,并以与表格字段相同的顺序提供这些值,则可以省略该字段列表。我通常会列出字段。

FROM条款,即我的CSV源文件的第一行包含字段名称HDR=yes信号。如果您的CSV文件没有,请使用HDR=no,Access会将假名称(例如fld1,fld2等)分配给CSV字段。

需要注意的是,如果不CSV包括字段名,他们需要不匹配的访问字段的名称。

如果你建立的查询设计一个类似的查询,谨防它可能改变FROM条款是这样的...

FROM (Text;HDR=yes;Database=C:\share\Access\) sample.csv AS csv; 

所以,如果出现这种情况,将其更改回,以避免语法错误。

我建议你开始只是一个SELECT查询来获取FROM条款的工作。然后根据需要添加您需要转换CSV值的功能。一旦SELECT查询返回所需内容,请将其转换为INSERT查询。

我的希望是,如果类似的查询可以为您的情况下工作,你不需要Excel作为中介来获取CSV数据导入Access。

+0

这看起来很有希望。你能解释FK_ID,CD等吗?这些是必要的,还是只是将数据追加到Access表的字段名? – prayingmantes 2013-03-21 01:02:43

+0

我认为你做到了。我明天就会放弃工作并报告。感谢Hans – prayingmantes 2013-03-21 01:11:52

+0

我想我应该澄清。 From语句到底是什么?显然它指向.csv文件,但HDR代表什么?该文件必须在共享文件夹中吗?如果它与Access数据文件在同一个目录中,我假设它会起作用? – prayingmantes 2013-03-21 01:25:23