CSV导出从php / Import到Access使用VBA --- schema.ini CharacterSet问题

时间:2016-05-27 23:07:13

标签: php vba csv ms-access

我目前正在处理一个我想将各种表从MySQL数据库导出到csv文件的事情,然后应该可以将这些csv文件导入带有VBA的Access数据库。

我设法下载了一个包含csv文件和schema.ini的zip文件。为了导入csv文件,我粗略地使用(为了简洁起见省略了循环)这段代码:

Sub ImportTableOne()
    Dim db As DAO.Database
    Set db = CurrentDb()
    frompart = "[Text;FMT=CSVDelimited;HDR=Yes;DATABASE=" & CurrentProject.Path & "\csvfiles\" & ";].[fileone.csv];"
    db.Execute _
    "SELECT * INTO tableone FROM" & frompart, dbFailOnError
    db.TableDefs.Refresh
    RefreshDatabaseWindow
End Sub

我的问题是我可以在schema.ini中拥有CharacterSet=ANSI,这当然会产生一个结果,例如í变成í-。将schema.ini中的内容更改为CharacterSet=UTF-8将产生运行时错误3000:保留错误(-5402)。

我已经尝试通过在fopen()之后添加一个UTF-8 bom来使csv文件在php中表现得更多UTF-8:如下所示:

fputs($csvfile, chr(0xEF) . chr(0xBB) . chr(0xBF) );

当我在excel或notepad ++中打开csv文件时,charset似乎没问题。当在php中使用UTF-8 bom并尝试导入时,bom最终会成为第一列标题的一部分:columnheadingone。对于我所知道的关于schema.ini如何工作的人来说,这可能并不令人惊讶。

如果有任何解决方法,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

“Text ISAM”驱动程序及其关联的“schema.ini”文件不支持UTF-8文件,因为它们早于Unicode时代。 MSDN文档的“选择字符集”部分

Schema.ini File (Text File Driver)

  

您可以从两个字符集中进行选择:ANSI和OEM。

因此,您可能需要设计另一种方式来导入数据。如果您想使用UTF-8,那么您可能会对相关问题here感兴趣。