Страница 1 из 1
SQLite проблема фильтрации с помощью оператора LIKE
Добавлено: 09.03.2015 20: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'.
может чего подскажете

Re: SQLite проблема фильтрации с помощью оператора LIKE
Добавлено: 09.03.2015 21:11:01
Zhbr
В свойстве filter необходимо указывать не sql like запрос а двоичное выражение, поля должны существовать соответственно. Я с телефона поэтому скопирастил пример:
Filter := '[State] = ''' + FilterState + ''') AND ([City]= ''Kapaa Kauai'')';
Re: SQLite проблема фильтрации с помощью оператора LIKE
Добавлено: 10.03.2015 05:45:14
DYUMON
как бы по умолчанию like в sqlite работает только для латиницы
Re: SQLite проблема фильтрации с помощью оператора LIKE
Добавлено: 10.03.2015 10:52:08
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'.
А таких записей много

Re: SQLite проблема фильтрации с помощью оператора LIKE
Добавлено: 10.03.2015 12: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 19: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 22:40:29
Zhbr
Да, все правильно. Не использовал дельфи, не знаю как там этот компонент работает. Не логично как то использовать sql синтаксис в данном свойстве, если его можно иcпользовать в text.
Re: SQLite проблема фильтрации с помощью оператора LIKE
Добавлено: 11.03.2015 00:34:33
Ism
Re: SQLite проблема фильтрации с помощью оператора LIKE
Добавлено: 11.03.2015 20:22:13
KepPronin
Уважаемый "Ism" большое спасибо за ваш ответ.
Действительно
работает!
Небольшое дополнение:
В Lazarus такой фильтр чувствителен к регистру.
В Delphi - нет.
Re: SQLite проблема фильтрации с помощью оператора LIKE
Добавлено: 11.03.2015 21:31:57
Ism
KepPronin писал(а):В Lazarus такой фильтр чувствителен к регистру.
Тут поможет
http://www.freepascal.ru/forum/viewtopi ... 01&p=74625