访问:将CSV文件读入表中

时间:2010-06-06 23:46:03

标签: vba ms-access

是否可以以编程方式访问打开某个csv文件并将其读入数据表并设置参数,如分隔符,TEXT QUALIFIER等的时间,包括手动将csv文件导入表中所需的所有步骤?

2 个答案:

答案 0 :(得分:2)

您可以创建一个Scripting.FileSystemObject,然后逐行在文件中流,按分隔符分隔字段,并将每个已分析的记录添加到基础记录集或另一个表。

您也可以试用DoCmd.TransferText,因为这似乎是最有前途的内置方法。

编辑:对于更完整(复杂且效率更低)的解决方案,它可以让您更好地控制架构,并像处理任何其他数据源一样处理任何csv文件,请查看ODBC:Microsoft Text Driver - {{3}用于脚本示例。我相信你已经可以通过标准MS Access前端link对任何cvs文件进行{{1}},从而允许你对其进行任何表读/复操作。否则,只需设置一个ODBC文件dns条目即可插入csv文件(通过开始 - >程序文件 - >管理工具 - >数据源),然后您可以通过Access文件选择/链接到它。

答案 1 :(得分:0)

这在很大程度上取决于是否已经创建了Access表,或者您是否想即时创建它。为了简单起见,我们假设该表已经存在(您可以随时返回并创建该表)。根据建议,您需要一些脚本工具:

Dim FSO As FileSystemObject, Fo As TextStream, line As String
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Fo = FSO.OpenTextFile("csvfile.csv")

这将使您可以读取文本文件的csv文件。您可以在此处控制使用哪个定界符以及将采用哪种日期格式。您还需要启用数据库引擎:

Dim db As Database
Set db = DBEngine.OpenDatabase("mydatabase.accdb")

这基本上就是您所需要的。您逐行阅读了csv文件:

While Not Fo.AtEndOfStream
 line = Fo.ReadLine

现在,您需要能够为表格充分格式化每个字段的格式,这意味着:文本字段必须用引号(“)包围,日期字段必须用#等等。数据库引擎会发出嘈杂的声音,但同样,您将在这里负责,您可以对输入行进行任何必要的整容手术。我正在做的另一个假设(为简单起见)是您可以使用VBA进行编程。 因此,让我们解决问题的症结所在:

 db.Execute ("INSERT INTO myTable VALUES (" & line & ")")
Wend

此刻,已更改为可用于数据库引擎的内容,例如,如果原始读取的行是

33,04/27/2019,1,1,0,9,23.1,10,72.3,77,85,96,95,98,10,5.4,5.5,5.1,Cashew,0

您将其更改为

33,#04/27/2019#,1,1,0,9,23.1,10,72.3,77,85,96,95,98,10,5.4,5.5,5.1,"Cashew",0

最后一个注意事项:重要的是,csv文件的每个字段都应与表格中的字段相匹配。这至少包括(但不一定要最后)处于正确的顺序。您必须确保在预处理阶段。希望这能使您走上正确的轨道。