Страница 1 из 1

SQLite проблема фильтрации с помощью оператора LIKE

СообщениеДобавлено: 09.03.2015 21:19:56
KepPronin
Добрый день всем посетителям форума!
Пытаюсь перенести свой проект из DELPHI7 на Lazarus. Столкнулся с такой проблемкой:
На форме имеем SQLquery, SQLite3connection. База данных SQLite3.
Если в SQLquery.SQL.Text заносим запрос:
SELECT st_name, fl_price FROM tb WHERE st_name LIKE '%ABC%';
то такая фильтрация отлично работает.
Но если в SQLquery.SQL.Text заносим запрос:
SELECT st_name, fl_price FROM tb;
а в свойство SQLquery.Filter заносим:
st_name LIKE '%ABC%';
программа выдает ошибку:
index based on unknown field 'like'.
может чего подскажете :cry:

Re: SQLite проблема фильтрации с помощью оператора LIKE

СообщениеДобавлено: 09.03.2015 22:11:01
Zhbr
В свойстве filter необходимо указывать не sql like запрос а двоичное выражение, поля должны существовать соответственно. Я с телефона поэтому скопирастил пример:
Filter := '[State] = ''' + FilterState + ''') AND ([City]= ''Kapaa Kauai'')';

Re: SQLite проблема фильтрации с помощью оператора LIKE

СообщениеДобавлено: 10.03.2015 06:45:14
DYUMON
как бы по умолчанию like в sqlite работает только для латиницы

Re: SQLite проблема фильтрации с помощью оператора LIKE

СообщениеДобавлено: 10.03.2015 11:39:58
KepPronin
DYUMON писал(а):как бы по умолчанию like в sqlite работает только для латиницы

Латиница тут не причем. Ошибка возникает с любой раскладкой. Ругается на LIKE.

Добавлено спустя 12 минут 10 секунд:
Zhbr писал(а):В свойстве filter необходимо указывать не sql like запрос а двоичное выражение, поля должны существовать соответственно. Я с телефона поэтому скопирастил пример:
Filter := '[State] = ''' + FilterState + ''') AND ([City]= ''Kapaa Kauai'')';


Поясните пожалуйста, что значит двоичное выражение?
Попробовал по вашему примеру:
1. на квадратные скобки ругается.
2. Filter := 'st_name = "%v%'''
такой фильтр выдает ноль записей.
т.е в моей таблице нет записей st_name = 'v'. И это действительно так.
но мне нужно чтобы фильтр показал все записи содержащие в поле st_name буквы 'v'.
А таких записей много :roll:

Re: SQLite проблема фильтрации с помощью оператора LIKE

СообщениеДобавлено: 10.03.2015 13:31:11
Zhbr
Поясните пожалуйста, что значит двоичное выражение?

Ну емае :)
a:=10
b:=10
a = b ?
результат это 1 или 0(true , false)
вот тебе и двоичное выражение, соответственно можно использовать эти самые операторы >,<,or,and и так далее.

Судя из п2 ты смысл filter понял, но обрати внимание на свойство filtered http://www.freepascal.org/docs-html/fcl/db/tdataset.filtered.html
После того как ты параметры фильтрации задал ты filtered включил?

Re: SQLite проблема фильтрации с помощью оператора LIKE

СообщениеДобавлено: 10.03.2015 20:49:58
KepPronin
Zhbr писал(а):После того как ты параметры фильтрации задал ты filtered включил?

Ну ЁмаЁЁ!

Насчет доичного выражения.
Я правильно понимаю, что в Lazarus TSQLquery свойство Filter не понимает оператор LIKE?
В Delphi TADODataSet все прекрасно работает.








Zhbr


незнакомец



Сообщения: 5Зарегистрирован: 31.01.2014 01:34:21


Профиль
Личное сообщение








Re: SQLite проблема фильтрации с помощью оператора LIKE

СообщениеДобавлено: 10.03.2015 23:40:29
Zhbr
Да, все правильно. Не использовал дельфи, не знаю как там этот компонент работает. Не логично как то использовать sql синтаксис в данном свойстве, если его можно иcпользовать в text.

Re: SQLite проблема фильтрации с помощью оператора LIKE

СообщениеДобавлено: 11.03.2015 01:34:33
Ism
Проверил

Код: Выделить всё
st_name LIKE '%ABC%'   

в Lazarus
Код: Выделить всё
st_name="*ABC*"

Re: SQLite проблема фильтрации с помощью оператора LIKE

СообщениеДобавлено: 11.03.2015 21:22:13
KepPronin
Уважаемый "Ism" большое спасибо за ваш ответ.
Действительно
Код: Выделить всё
st_name="*abc*"

работает!
Небольшое дополнение:
В Lazarus такой фильтр чувствителен к регистру.
В Delphi - нет.

Re: SQLite проблема фильтрации с помощью оператора LIKE

СообщениеДобавлено: 11.03.2015 22:31:57
Ism
KepPronin писал(а):В Lazarus такой фильтр чувствителен к регистру.

Тут поможет
Код: Выделить всё
FilterOptions
OnFilterRecord

http://www.freepascal.ru/forum/viewtopi ... 01&p=74625