-
DELPHI XE3 Загрузил через OLE справочник из 1С 1C 7.7, хранящегося в dbf в формате asci, в таблицу SQLite с использованием оберток SQLite3.pas и SQLiteTable3.pas, но при просмотре таблицы в SQLite Studio вместо кириллицы в полях таблицы показаны крокозябры. БД SQLite в формате UTF-8 (по умолчанию). Механизм OLE возвращает variant. Видимо, требуется перекодировка импортируемых данных. А функций для конверсии так много и типы их параметров такие разные, что я не могу разобраться, т.к я новичок в Delphi. Уважаемые гуру, научите, пожалуйста, как правильно загрузить кириллицу. И очень прошу, с примером кода.
-
> Механизм OLE возвращает variant. вариант это не тип, он может и просто бинарный массив вернуть... тогда авто конвертации (если она есть в том чем пользуешься) не будет... т.е. нужно смотреть на каждом этапе в какой кодировке реально строки и конвертировать (/настроить) по необходимости. функция для конвертации из DOS (dbf возможно в нем) в виндовую - OemToChar. из виндовой в Utf8 - AnsiToUtf8.
+ если неправильно настроить авто конвертацию то получатся "не разбираемые кракозябры". т.е. если после применения функции все одно "криво" то скорее всего двойная конвертация (в dbf например лежит в 1251(ansi) и при чтении в компоненте стоит конвертация из DOS в ansi)
-
Попытайтесь, пожалуйста, мне еще раз растолковать. Поскольку Механизм OLE возвращает variant, а trim() преобразует его в string, я пробовал писать в базу trim(OleSpr.Наименование) - Base.ExecSQL(Format(SQLInsertCv,[AnsiToUtf8(trim(OleSpr.Наименование)),OleSpr.Оп исание, OleSpr.Обработчик, OleSpr.ШаблонЗапуска])); нет эффекта, крокозябры :(
-
растолковываю... нет кнопки (© Приключения Электроника), нет волшебной функции которую использовал и все стало ок.
есть несколько используемых тобой компонент, баз, модулей, фунций. и везде может стоять авто преобразование, каждую функцию применять для необходимого, и нужно смотреть на каждом этапе.
> а trim() преобразует его в string а стринг в XE3 (не обратил сначала внимания) по умолчанию юникод... т.е. даже тут раз тип "неправильный" то AnsiToUtf8 с него может не сработать. а уж если SQLite3.pas и SQLiteTable3.pas не адаптированны под юникод (взяты от старой дельфи), то там тоже везде String, а не AnsiString (или конвертация прямо от юникода) тогда чтобы ты на вход не подал оно его "исковеркает".
разбирайся последовательно, на каком этапе еще не кракозябры, а нормальный текст... и в какой он там кодировке? это раз. когда выполняешь следующую процедуру, какого типа она ждет в параметрах? и правильный ли тип для твоей дельфи + компонент? это два.
-
Значит Вы думаете, что причиной проблемы могут быть обертки SQLite3.pas и SQLiteTable3.pas, т.к они не не адаптированны под XE3 и юникод, и нужно использовать какие-то другие средства для загрузки? Один коллега без проблем загрузил мой файл dbf с использованием компоненты TDBF. Но у него D7, а у меня TDBF на ХЕ3 не ставится, ошибка при компиляции. У Вас есть какие-нибудь соображения на этот счет?
-
я думаю у тебя ошибка в 17й строке... связанная (возможно) с особенностями используемых компонент, их не знанием как и среды разработки, и главное не желанием разбираться, но получить готовый рецепт.
+ соображения я высказал, последний абзац прошлого поста.
-
Желание то есть, только вот знаний не хватает (я новичок в Дельфи), а сделать хочется побыстрее. Поэтому и надеюсь получить от гуру практическую помощь, а не моральные поучения.
-
-
А что такое dbf, какой именно?
|