德爾福XE3,Win7的教授德爾福:的ADOConnection,DBASE3和字符集(?BUG)
我需要寫入DBASE 3(舊格式)文件導出數據的類似DOS的應用程序(?快船) 。 好吧,我想:MS DBASE驅動程序可以做到這一點。
但是我有匈牙利口音問題。
我嘗試此連接字符串:
Driver={Microsoft dBASE Driver (*.dbf)};DriverID=21;Dbq=c:\temp;Extended Properties=dBASE III;charSet=CP 852;Locale Identifier=1038;Character Set=CP 852;CODEPAGE=852
當我看到它不能只寫ANSI文件(DOS應用程序接受CP852字符)。
我試圖與AnsiToOEM內容轉換,而是一些字符丟失保存。在記錄中我看到很好的內容,但保存的文件包含錯誤的口音。 測試文本是「árvíztűrőtükörfúrógép」。 結果中缺少「í」,「ó」,「Ó」。
而且我發現了一些奇怪的事情!
如果主表單有一個打開的ADOConnection(DFM中的連接屬性爲true),那麼我將從DBASE文件中讀取好字符,並且可以將它們寫入文件 - ANSI字符將被正確轉換。 「í」沒問題,「ó」沒問題。此ADOConnection對象可能與閱讀器不同。
如果我關閉此在的ADOConnection IDE模式,打開的文件將不會被轉換,所以我會看到一些奇怪的字符帶重音符號,我不會寫好文本文件。
這很奇怪,因爲如果我通過代碼在FormCreate上打開這個連接,問題就會出現...... 如果資源流化器讀取ADOConnection的活動(真值)「連接」,我可以讀寫ADOQuery記錄,來自DFM的財產!
我不知道在後臺發生了什麼,以及如何強制這個ADO字符轉換例程工作,但我浪費了更多的時間來找到一個可用的DBASE III導出器,並且我發現只有一個錯誤的東西。 。
有誰知道這是什麼原因?爲什麼ADO字符編碼器/解碼器僅在DFM中連接ADOConnection時才起作用? 或者我如何使用ADODB.Connection而不是ADOConnection對象來避免這種副作用?
感謝您的每一個想法!