2016-05-27 75 views
2

我目前正在從事一個事物,我想從MySQL數據庫導出各種表格到CSV文件,然後應該可以導入使用VBA將這些csv文件轉換爲Access數據庫。CSV導出從PHP /導入到訪問使用VBA --- schema.ini字符集問題

我設法生成一個包含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)。

我已經嘗試過通過添加UTF-8 BOM fopen()像這樣之後獲得csv文件的行爲在PHP更UTF-8ish:

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

當我在Excel或記事本打開CSV文件++ ,charset似乎沒問題。當在php中使用UTF-8 bom並嘗試導入時,bom只會成爲第一列標題的一部分,如下所示:columnheadingone。對於我所知道的schema.ini的工作原理來說,這可能並不令人驚訝。

我將不勝感激關於如何解決這個問題的任何提示。

+0

好奇,爲什麼不使用PHP通過ODBC/OLEDB連接到MS Access數據庫並追加數據?甚至更多,爲什麼不將MySQL鏈接表連接到Access並遷移到本地表,避免csv轉換? – Parfait

+0

我不知道如果服務器,這將運行,將安裝驅動程序,我絕對沒有權限安裝它們。 – Thomas

回答

2

「Text ISAM」驅動程序及其關聯的「schema.ini」文件不支持UTF-8文件,因爲它們是在Unicode時代之前的日期。在MSDN文檔

Schema.ini File (Text File Driver)

的 「選擇字符集」 一節中說

可以從兩個字符集選擇:ANSI和OEM。

因此,您可能需要設計另一種導入數據的方式。如果您想使用UTF-8,那麼您可能會對相關問題here感興趣。

+1

謝謝你。順便說一句:我谷歌搜索,並試圖加載這個頁面,我不知道有多少次,除了錨點什麼都沒有。所以對於讀這個的每個人來說:等等。除了錨點圖標之外,您只會在一分鐘內得到更好的部分,然後最終獲得您正在尋找的內容。 現在,我只需轉到[iconv()](http://php.net/manual/de/function.iconv.php),然後再更改爲最有可能鏈接到此處的XML方法。 – Thomas