| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
Посмотрите эту статью 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)+'")'; Но теперь есть ещё одна проблема. Выборка записей из бд с использованием кириллицы получается регистрозависимая. Каким образом можно поправить эту проблемку? |