|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
поиск в SQLite используя LIKE
Здравствуйте!
В проекте Delphi использую SQLite, подключился, делаю выборку, перевожу строки из UTF8, все получается, но с поиском не выходит. Поиск ведется по полю, где строки вида: 100230какой-тотоварname. Запрос такого вида: Код:
str := Edit1.Text; str := StringReplace(str, ' ', '', [rfReplaceAll]); str := AnsiLowerCase(str); sQuery := 'SELECT name, id, type_id FROM t_cat WHERE id in (SELECT cat_id FROM t_names WHERE search LIKE ''%'+str+'%'')'; sltb := sldb.GetTable(sQuery); В интернете нашел много инфо. Советуют кодировать в UTF8 при запросе в базу. Примерно так: Код:
sldb.GetTable := AnsiString(UTF8Decode(sldb.GetTable('SELECT name, id, type_id FROM t_cat WHERE id in (SELECT cat_id FROM t_names WHERE search LIKE ''%'+str+'%'')'); Пробывал кодировать строку перед запросом в базу Код:
str := UTF8Decode(str); Понимаю, что для многих это легко и просто, но я недавно в Delphi и с этим не выходит разобраться. Буду благодарен совету или ссылке, как выполнить запрос на русском. |
#2
|
|||
|
|||
Мои эксперименты показали, что все, что не на англ, работает неправильно (относительно LIKE). Соответсвенно, просто перешел на EmbeddedFB.
|
#3
|
|||
|
|||
lmikle,
я видел проект на delphi с поиком на русском, может конечно, там не LIKE. Но пишут же на форумах, что используя код для перевода строки в UTF8( как костыль) и им этого хватало. Просто у меня уже мало времени для перехода на другую базу. В SQLite все написано и база и удобно(проект будет на CD). Помогите с правильным кодом перевода строки в UTF8, возможно, что-то получится |
#4
|
|||
|
|||
Ну, тогда, для начала, я бы смотрел на UTF8Encode. Тебе ведь надо ЗАКОДИРОВАТЬ строку в utf. Это раз. Два. А WideString не пробовал?
ЗЫ. Переход на EmbeddedFB не так сложен, как кажется. Хотя, судя по коду, ты напрямую библиотеку используешь. Я пользовался оберткой-наследником TDataSet и переход был очень простой. |
#5
|
|||
|
|||
lmikle,
Использую SQLiteWrapper Делаю так: Код:
bdz: WideString; bdz := UTF8Encode(str); А так Код:
sltb := AnsiString(UTF8Encode(sldb.GetTable('SELECT name, id, type_id FROM t_cat WHERE id in (SELECT cat_id FROM t_names WHERE search LIKE ''%'+bdz+'%'')'))); |
#6
|
|||
|
|||
Понимаю, что как-то не так использую UTF8Encode, подскажите где ошибка.
|
#7
|
||||
|
||||
Можно попробовать закодировать юникод строку в Quoted Printable. И все строки хранить в таом формате.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 18.10.2011 в 07:31. |
#8
|
|||
|
|||
M.A.D.M.A.N.,
напишите, пожалуйста, пример |
#9
|
||||
|
||||
В общем, wchar_t переводишь в последовательность байт и каждый байт переводишь ф-ей IntToHex().
http://www.motobit.com/util/quoted-p...le-decoder.asp — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |