Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SqLite 3 - Поиск кириллицы, Работает неправильно 
:(
    Опции темы
viruseg
Дата 7.3.2010, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



Поиск по бд делаю с помощью select. С латинскими символами, работает безошибочно, но вот с кириллическими результат получается очень даже неправильный.
'select id,Date,Bufer,TypeBufer,Length from History WHERE bufer like "%'+str+'%"'

Сама бд создаётся без указания кодировки.
var
sldb: TSQLiteDatabase;

sldb := TSQLiteDatabase.Create('history');
'CREATE TABLE History (id INTEGER PRIMARY KEY, Date TEXT, Bufer TEXT, TypeBufer TEXT, Length TEXT)'

Нахожусь в полном тупике, поиск в гугле ни чего не дал. Похоже ни кто не сталкивался с этой проблемой.

з.ы. Использую Delphi 2k9. Компоненты прикрепляю на всякий случай, может быть проблема в них?

Это сообщение отредактировал(а) viruseg - 7.3.2010, 09:59

Присоединённый файл ( Кол-во скачиваний: 28 )
Присоединённый файл  sqlite.rar 242,96 Kb
PM MAIL WWW   Вверх
Alexeis
Дата 7.3.2010, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



viruseg, учтите, что когда вы используете String с этими компонентами, то осуществляете преобразование Ansi -> Unicode. Если программа не знает какая кодировка Ansi текущая, то она может осуществить неверное преобразование.
  В Delphi 2009 все контролы юникодные, так что за преобразованием нужно следить. Delphi 2009 удобен в сочетании с юникодными компонентами, для которых не нужно производить ни каких преобразований.
  В вашем случае удобнее Delphi 2007. Он построен на Ansi контролах. Ansi-Ansi не потребует дополнительных преобразований и позволит избежать потери информации о кодировке.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
viruseg
Дата 7.3.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



А как в моём случае сделать правильное преобразование. Переход на Делфи 2007 не возможен ввиду использования некоторых компонентов заточеных под 2009. А переписывать весь проект с ноля занятие не из приятных :(
PM MAIL WWW   Вверх
Alexeis
Дата 7.3.2010, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



Цитата(viruseg @  7.3.2010,  13:31 Найти цитируемый пост)
А как в моём случае сделать правильное преобразование.

  Посмотрите эту статью http://edn.embarcadero.com/article/38582 . Часть про StringCodePage . Можно и нужно определять кодировку строки.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lukamal
Дата 8.3.2010, 04:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.3.2010

Репутация: нет
Всего: нет



Интересно посмотреть как вы решите данную проблему!!!
С месяц назад пытался сделать тоже самое из php.
Посмотрите здесь http://sql.ru/forum/actualthread.aspx?tid=725368 может пригодится!!!

PM MAIL   Вверх
viruseg
Дата 10.3.2010, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



Проблему решил с помощью UTF8Encode/UTF8Decode.

historysltb := sldb.GetTable('select id,Date,Bufer,TypeBufer,Length from History WHERE LowerText like "%'+UTF8Encode(str)+'%"');

sqlstring:='insert into History (Date,Bufer,TypeBufer,Length,LowerText) values("'+UTF8Encode(str+'","'+str2+'","'+Rec[13].typeclbd+'","'+IntToStr(l)+'","'+str2)+'")';

Но теперь есть ещё одна проблема. Выборка записей из бд с использованием кириллицы получается регистрозависимая. Каким образом можно поправить эту проблемку?
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.