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

Модератор: Модераторы

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

Сообщение KepPronin » 09.03.2015 21:19:56

Добрый день всем посетителям форума!
Пытаюсь перенести свой проект из 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:
KepPronin
незнакомец
 
Сообщения: 5
Зарегистрирован: 09.03.2015 20:49:45

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

Сообщение Zhbr » 09.03.2015 22:11:01

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

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

Сообщение DYUMON » 10.03.2015 06:45:14

как бы по умолчанию like в sqlite работает только для латиницы
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

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

Сообщение KepPronin » 10.03.2015 11:39:58

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:
KepPronin
незнакомец
 
Сообщения: 5
Зарегистрирован: 09.03.2015 20:49:45

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

Сообщение Zhbr » 10.03.2015 13:31:11

Поясните пожалуйста, что значит двоичное выражение?

Ну емае :)
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 включил?
Zhbr
новенький
 
Сообщения: 44
Зарегистрирован: 31.01.2014 02:34:21

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

Сообщение KepPronin » 10.03.2015 20:49:58

Zhbr писал(а):После того как ты параметры фильтрации задал ты filtered включил?

Ну ЁмаЁЁ!

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








Zhbr


незнакомец



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


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







KepPronin
незнакомец
 
Сообщения: 5
Зарегистрирован: 09.03.2015 20:49:45

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

Сообщение Zhbr » 10.03.2015 23:40:29

Да, все правильно. Не использовал дельфи, не знаю как там этот компонент работает. Не логично как то использовать sql синтаксис в данном свойстве, если его можно иcпользовать в text.
Zhbr
новенький
 
Сообщения: 44
Зарегистрирован: 31.01.2014 02:34:21

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

Сообщение Ism » 11.03.2015 01:34:33

Проверил

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

в Lazarus
Код: Выделить всё
st_name="*ABC*"
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

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

Сообщение KepPronin » 11.03.2015 21:22:13

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

работает!
Небольшое дополнение:
В Lazarus такой фильтр чувствителен к регистру.
В Delphi - нет.
KepPronin
незнакомец
 
Сообщения: 5
Зарегистрирован: 09.03.2015 20:49:45

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

Сообщение Ism » 11.03.2015 22:31:57

KepPronin писал(а):В Lazarus такой фильтр чувствителен к регистру.

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

http://www.freepascal.ru/forum/viewtopi ... 01&p=74625
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru