Delphi XE3, Win7 профDelphi: ADOConnection, DBASE3 и набор символов (? Ошибка)
мне нужно написать в DBASE 3 (старый формат) файлов для экспорта данных для DOS-приложения, как (? Clipper) , Хорошо, я подумал: драйвер 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), то я буду читать хорошие символы из файлов DBASE, и я могу записать их в файл - символы ANSI будут преобразованы правильно. «Все нормально», «нормально». Этот объект ADOConnection может отличаться от чтения.
Если я закрою это ADOConnection в режиме IDE, открытые файлы не будут преобразованы, поэтому я увижу некоторые странные акцентированные символы, и я не буду писать хороший текст в файл.
Это странно, потому что, если я открою это соединение на FormCreate по коду, проблема появится ... Я могу читать и записывать записи ADOQuery, если поток ресурсов читает активное соединение ADOConnection (истинное значение) собственность от DFM!
Я не знаю, что произошло в фоновом режиме, и как заставить эту процедуру преобразования символов ADO работать, но я потратил больше времени на то, чтобы найти работающего экспортера DBASE III, и я нашел только ошибку. .
Кто-нибудь знает, что это? Почему кодировщик/декодер ADO работает только в том случае, если у меня было подключенное ADOConnection в DFM? Или как я могу использовать ADODB.Connection вместо объекта ADOConnection, чтобы избежать этого побочного эффекта?
Спасибо за любую идею!