Фильтр запросов delphi firedac база данных Firebird

Я переношу базу данных с SQLITE на Firebird, но теперь мой запрос не работает.

Что я делаю неправильно? Есть причина?

frmDados.Clientes.Close();   
frmDados.Clientes.SQL.Text := 
    'SELECT * FROM CLIENTES ' +
    'WHERE  (nomecliente like  :d1) '+
    'order by nomecliente asc';   
frmDados.Clientes.Params.ParamByName('d1').AsString := '%' + Edit1.text + '%';

frmDados.Clientes.OpenOrExecute();

person ml.    schedule 06.04.2015    source источник
comment
Нет только фильтровать avething. Например, если у меня есть буква abcd, я пишу A и не фильтрую ее, я пишу C, она фильтрует. НОМЕКЛИЕНТ ВАРЧАР (80),   -  person ml.    schedule 06.04.2015
comment
мой запрос не работает - бесполезное описание проблемы. Пожалуйста, отредактируйте свой вопрос и объясните, как он не работает. Вы получаете неправильные результаты? Вы получаете сообщение об ошибке? Если вам нужна помощь в решении проблемы, объясните конкретно проблему, с которой вы столкнулись.   -  person Ken White    schedule 06.04.2015
comment
И если вы напишете тот же запрос (с заполнением параметра) в своем инструменте управления, даст ли он вам ожидаемые результаты? Во всяком случае, я бы лично не стал выбирать Firebird в наши дни (если вообще когда-либо).   -  person TLama    schedule 06.04.2015
comment
Привет, проблема: поиск: El Corte Inglés, если я напишу, el ничего не вернет, если я напишу El или Co, он вернет данные. есть ли способ узнать, каптал это или нет?   -  person ml.    schedule 06.04.2015


Ответы (1)


Доза Firebird не поддерживает запросы без учета регистра.

Query_Case_Insensitive.html

Рассмотрим эти варианты

select * from "abc_table" where "Some_Field" = 'Abc'

select * from "abc_table" where "Some_Field" like 'Abc'

select * from "abc_table" where "Some_Field" containing 'Abc'

select * from "abc_table" where upper("Some_Field") = 'ABC'

Equals (=) и * like * оба выполняют совпадения с учетом регистра
* contains * нечувствителен к регистру, но также будет соответствовать 'abcd'
upper () работает, но не будет использовать индекс и, следовательно, будет читать каждую запись в таблице.
Equals (=) - самый быстрый, потому что он использует индекс (если доступен)

person moskito-x    schedule 06.04.2015
comment
Поскольку это так, но как я могу поступить в моем случае. Есть поле в верхнем регистре? или можно фильтровать? - person ml.; 06.04.2015
comment
Firebird поддерживает запросы без учета регистра (даже индексированные), если вы используете сортировку без учета регистра. - person Mark Rotteveel; 07.04.2015