Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > SqLite 3 - Поиск кириллицы


Автор: viruseg 7.3.2010, 09:54
Поиск по бд делаю с помощью 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. Компоненты прикрепляю на всякий случай, может быть проблема в них?

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

Автор: viruseg 7.3.2010, 14:31
А как в моём случае сделать правильное преобразование. Переход на Делфи 2007 не возможен ввиду использования некоторых компонентов заточеных под 2009. А переписывать весь проект с ноля занятие не из приятных :(

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

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

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

Автор: viruseg 10.3.2010, 12:02
Проблему решил с помощью 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)+'")';

Но теперь есть ещё одна проблема. Выборка записей из бд с использованием кириллицы получается регистрозависимая. Каким образом можно поправить эту проблемку?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)