![]() |
|
![]() ![]() ![]() |
|
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
задача аналогична описаной ТУТ
работаю с проектом, который изначально писался на Delphi2009 новая связка Delphi7+SQLite3... БД в юникоде, экспортирую так примерно:
в ответ знаки вопроса ????????? вместо русских букв... пробовал вместо Utf8Decode (который у меня шикарно справлялся с задачей в D2009) пользоваться вот этими костылями результат ткой же. ANSIToUTF8 и UTF8ToANSI вообще ничего не делают. так крокозяблы и выводят. может тут UTF16 какой-нибудь? или может как-то перекодировать в самом SQLite? ![]() |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
||||
|
||||
yogi89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.7.2008 Где: Южно-Сахалинск Репутация: нет Всего: нет |
Уверен, что сами данные в базе не хранятся криво? Можно проверить, сделав выборку строк без преобразования Utf8ToAnsi или Utf8Decode, либо через командную оболочку скулайта, перед запуском которой задать кодировку chcp 65001.
Задать принудительно кодировку SQLite можно запросом PRAGMA encoding="UTF-8" |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
уверен. в базе русские буквы есть. именно эта база работает описанным выше способом в D2009. проблема в том, что D7 не дружит с UTF так как более поздняя D2009...
я попробовал выполнить предложенную Вами команду PRAGMA encoding="UTF-8" PRAGMA encoding="chcp 65001" PRAGMA encoding="cp1251" эффекта нет. если зайти на закладку настроек бд в оболочке, то там неизменно стоит UTF-8 в качестве кодировки... даже если попытаться сменить на UTF-16... меняется только на закладке настроек (действительно, этой командой!) всё равно, спасибо за попытку. есть ещё какие-то идеи? Это сообщение отредактировал(а) CompWorm - 25.5.2010, 15:42 |
|||
|
||||
yogi89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.7.2008 Где: Южно-Сахалинск Репутация: нет Всего: нет |
Не правильно меня поняли. chcp 65001 - команда для CMD, меняющая кодовую на UTF8. После, можно запустить оболочку скулайта и русские строчки будут выводиться, как надо.. Можно так проверить, действительно ли в базе данные хранятся не криво.. cp1251 - не поддерживается вообще скулайтом. Странно, почему не работает функция Utf8ToAnsi. Проверил у себя(правда, на 2010х делфях) - все прекрасно преобразовывается... |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
Это встраиваемая база данных, без всяких провайдеров и датасетов
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Т.е. компонента TDataSource сразу цепляется к базе??? Круто!
|
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
Akella, ммм... там конечно есть DISQLite3DataSetImporter, но скрестить его с TDataSource у меня не особо получилось... любопытно, надо почитать на эту тему))
в основном подход такой:
... всё круто, но ведать только для D2007 и старше. судя по отзывам в инете с D7 проблемы((( с оператороми сортировки особо изощрённые чудеса)) у меня назрел вопрос, а нет отдельного модуля для работы с UTF8 для D7... может кто пытался выковыривать код из старших версий дельфи? дело в том, что этот же код с этой же БД скомпилированный под D2009 работает на ура... |
|||
|
||||
Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
Работаю в D6 с SQLite. Проблем никаких. Обёртка в приложенном файле. Добавляю свою надстройку над обёрткой и всё. Добавлено @ 21:11 SQLite предоставляет только API для доступа к БД. Это сообщение отредактировал(а) Демо - 30.5.2010, 23:35 Присоединённый файл ( Кол-во скачиваний: 30 ) ![]() -------------------- |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: нет Всего: 18 |
Akella, нет там этих вещей, запросы через импортируемые из dll процедурки уходят.
Довольно удобно ![]() |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
Демо, я пользуюсь именно этой обёрткой.
если кому не лень, запустите у себя примерчик и скажите, есть у вас русские символы или нет. может я просто туплю где-то... Присоединённый файл ( Кол-во скачиваний: 29 ) ![]() |
|||
|
||||
Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
Только вечером дома... Добавлено через 6 минут и 10 секунд CompWorm, А почему такой выбор - кодирование в UTF-8? -------------------- |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Да знаю я.
Я просто своим вопрос хотел намикнуть на то, что CompWorm не указал компоненты доступа. А ещё он не указал, поддерживают ли они анси или там юникод. |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
Демо, по умолчанию это основная кодировка в скулайте. есть ещё всякие UTF-16, UTF-16le, UTF-16be... других не вижу... а вы какой рекомендуете пользоваться?
|
|||
|
||||
Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
У меня по-умолчанию Win1251. Добавлено через 1 минуту и 29 секунд Поэтому просто никаких проблем не возникает. Добавлено через 4 минуты и 13 секунд CompWorm, Как добавляешь строки в базу? -------------------- |
|||
|
||||
Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 2 Всего: 50 |
Если писать без всякой перекодировки, то и читается всё нормально.
Кстати, вот эти 2 строки
твою первую запись из таблицы показывают нормально. -------------------- |
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
![]() не представляю в чём тогда проблема... может с виндой что не так? хмм... ну попробую сегодня поставить дельфи7 на другой машине... я в шоке ![]() Добавлено через 4 минуты и 37 секунд у меня утф, так как строки я заполнял в приблуде для работы со скулайтом, а не программно. я попробую ваш метод. спасибо. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
CompWorm, по-моему, ты уже запутался в кодировках. Я бы на твоем месте взял и привёл всё к единой кодировке. И данные, и базу, и подключение, и среду разработки, и компоненты доступа %)
|
|||
|
||||
CompWorm |
|
|||
![]() Допеределыватель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1689 Регистрация: 6.12.2004 Где: / Репутация: нет Всего: 31 |
Демо,
большое спасибо за помощь+! я попробовал программно заносить данные без кодирования в UTF и всё нормально заработало.... ЗЫ если зайти в базу через приблуду, то русский текст отображается кракозяблами типа
но в проге работает на ура! ![]() не понятно только почему мой код у вас сработал с моей базой... ![]() |
|||
|
||||
hhhhhhhhhhhh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2008 Репутация: нет Всего: нет |
Тогда не работает русский поиск через LIKE. А если при записи в базу кодировать в UTF, то русский поиск работает, НО регистрозависимо. Как сделать чтобы и кодировать ни надо было(ибо база разбухает от этого гребаного UTF) и поиск русских слов нормально работал, причем регистронезависимо?! Помогите! |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
что-то типа
Ищи в SQLite функцию UPPER |
|||
|
||||
hhhhhhhhhhhh |
|
||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2008 Репутация: нет Всего: нет |
Спасибо за наводку! Вроде разобрался!
Вот здесь есть пример с текстовым полем. http://forum.sources.ru/index.php?showtopic=294492 Я лиш добавлю на всякий случай пример с блобовым полем
запрос делаем чере UPPER приводя к UTF
ну и сортируем тоже через нашу функцию ORDER BY UPPER(colname) пс. строки в базу пишем без кодировки, база не распухает от UTF! 8D |
||||
|
|||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
hhhhhhhhhhhh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2008 Репутация: нет Всего: нет |
||||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
всмысле
|
|||
|
||||
hhhhhhhhhhhh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2008 Репутация: нет Всего: нет |
Ну, оказывается, русская сортировка тоже не работает без нашей UPPER функции
а вообще да, надо попробовать заюзать индексы для сортировки... Это сообщение отредактировал(а) hhhhhhhhhhhh - 25.3.2011, 14:27 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |