Конференция "Базы" » Проблемы с загрузкой данных в SQLite из 1С [SQLite ]
 
  • МАИ © (16.09.13 08:20) [0]
    DELPHI XE3
    Загрузил через OLE справочник из 1С 1C 7.7, хранящегося в dbf в формате asci, в таблицу SQLite с использованием оберток SQLite3.pas и SQLiteTable3.pas, но при просмотре таблицы в SQLite Studio вместо кириллицы в полях таблицы показаны крокозябры.
    БД SQLite в формате UTF-8 (по умолчанию).
    Механизм OLE возвращает variant.
    Видимо, требуется перекодировка импортируемых данных.  
    А функций для конверсии так много и типы их параметров такие разные, что я не могу разобраться, т.к я новичок в Delphi.
    Уважаемые гуру, научите, пожалуйста, как правильно загрузить кириллицу.  И очень прошу, с примером кода.
  • sniknik © (16.09.13 09:59) [1]
    > Механизм OLE возвращает variant.
    вариант это не тип, он может и просто бинарный массив вернуть... тогда авто конвертации (если она есть в том чем пользуешься) не будет... т.е. нужно смотреть на каждом этапе в какой кодировке реально строки и конвертировать (/настроить) по необходимости.
    функция для конвертации из DOS (dbf возможно в нем) в виндовую - OemToChar.
    из виндовой в Utf8 - AnsiToUtf8.

    +
    если неправильно настроить авто конвертацию то получатся "не разбираемые кракозябры". т.е. если после применения функции все одно "криво" то скорее всего двойная конвертация (в dbf например лежит в 1251(ansi) и при чтении в компоненте стоит конвертация из DOS в ansi)
  • МАИ © (16.09.13 11:59) [2]
    Попытайтесь, пожалуйста, мне еще раз растолковать.
    Поскольку Механизм OLE возвращает variant,
    а trim() преобразует его в string,
    я пробовал писать в базу trim(OleSpr.Наименование)  -
    Base.ExecSQL(Format(SQLInsertCv,[AnsiToUtf8(trim(OleSpr.Наименование)),OleSpr.Оп исание, OleSpr.Обработчик, OleSpr.ШаблонЗапуска]));
    нет эффекта, крокозябры :(
  • sniknik © (16.09.13 12:54) [3]
    растолковываю...
    нет кнопки (© Приключения Электроника), нет волшебной функции которую использовал и все стало ок.

    есть несколько используемых тобой компонент, баз, модулей, фунций. и везде может стоять авто преобразование, каждую функцию применять для необходимого, и нужно смотреть на каждом этапе.

    > а trim() преобразует его в string
    а стринг в XE3 (не обратил сначала внимания) по умолчанию юникод... т.е. даже тут раз тип "неправильный" то AnsiToUtf8 с него может не сработать. а уж если SQLite3.pas и SQLiteTable3.pas не адаптированны под юникод (взяты от старой дельфи), то там тоже везде String, а не AnsiString (или конвертация прямо от юникода) тогда чтобы ты на вход не подал оно его "исковеркает".

    разбирайся последовательно, на каком этапе еще не кракозябры, а нормальный текст... и в какой он там кодировке? это раз. когда выполняешь следующую процедуру, какого типа она ждет в параметрах? и правильный ли тип для твоей дельфи + компонент? это два.
  • МАИ © (16.09.13 20:17) [4]
    Значит Вы думаете, что причиной проблемы  могут быть обертки SQLite3.pas и SQLiteTable3.pas, т.к они не не адаптированны под XE3 и  юникод,
    и нужно использовать какие-то другие средства для загрузки?
    Один коллега  без проблем загрузил мой файл dbf с использованием компоненты TDBF. Но у него D7, а у меня TDBF на ХЕ3 не ставится, ошибка при компиляции.
    У Вас есть какие-нибудь соображения на этот счет?
  • sniknik © (17.09.13 07:58) [5]
    я думаю у тебя ошибка в 17й строке... связанная (возможно) с особенностями используемых компонент, их не знанием как и среды разработки, и главное не желанием разбираться, но получить готовый рецепт.

    + соображения я высказал, последний абзац прошлого поста.
  • МАИ © (17.09.13 12:47) [6]
    Желание то есть, только вот знаний не хватает (я новичок в Дельфи), а сделать хочется побыстрее. Поэтому и надеюсь получить от гуру практическую помощь, а не моральные поучения.
  • sniknik © (17.09.13 12:55) [7]
    не ври, это не хорошо...
    http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D1%80%D0%B0%D0%BB%D1%8C

    где померещились "моральные поучения"? исключая этот пост первую строку.
  • Anatoly Podgoretsky © (17.09.13 14:07) [8]
    А что такое dbf, какой именно?
 
Конференция "Базы" » Проблемы с загрузкой данных в SQLite из 1С [SQLite ]
Есть новые Нет новых   [119917   +127][b:0][p:0]