Like и ParamByName

londinium
Дата: 11.11.2007 21:03:45
Здравствуйте, Господа!

Возникла такая проблема:

В таблице есть поле Project varchar(20). Необходимо сделать выборку по этому полю. Пишу так:

  MainDataModule->SelectRecordQuery->SQL->Add(" project like :project ");
  MainDataModule->SelectRecordQuery->ParamByName("project")-> AsString=UpperCase (SelectParametersForm->ProjectEdit->Text);


Такой код работает, но ищет в базе только при полном совпадении project, т.е. в базе хранится в поле project запись A2-10-7 и эта запись находится, а вот если задать, например, A2 или A2-10, то не находится.

Вопрос такой: как правильно записать like с символами %?

Пробовал так:

  MainDataModule->SelectRecordQuery->SQL->Add(" project like’ :project %’ ");
  MainDataModule->SelectRecordQuery->ParamByName("project”)-> ")->AsString =UpperCase(SelectParametersForm->ProjectEdit->Text);


Компилятор ругается, что параметр project не найден. Как написать правильно?

Пишу на C++Builder 6.0 SP4, FireBird 1.5.3 SuperServer, IBX.
Anatoly Podgoretsky
Дата: 11.11.2007 21:06:26
Запрос менять не надо, надо менять присвоение параметру.

'A2%'
A.K.
Дата: 11.11.2007 21:33:53
Да можно и запрос поменять:
 MainDataModule->SelectRecordQuery->SQL->Add(" project like :project||'%' ");
Anatoly Podgoretsky
Дата: 11.11.2007 21:35:49
Это не гибко, не надо ничего менять. Приведеный запрос позволяет делать любой отбор лт точного до крайней степени %aa_bb%