Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамический запрос [D7, IB6.x]


Страницы:   1 2

Bolek ©   (2005-11-03 14:07:00) 

Доброго вренмени суток.
формирую динамический запрос следующим образом
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.Text = '' then
  begin
    IBQuery1.Close;
    IBQuery1.SQL.Clear;
    IBQuery1.SQL.Add('select * from DVD_DISK');
    IBQuery1.Open;
  end
else
   begin
     IBQuery1.Close;
     IBQuery1.SQL.Clear;
     IBQuery1.SQL.Add('select * from DVD_DISK ');
     IBQuery1.SQL.Add('where name LIKE '+Edit1.Text);
     IBQuery1.Open;
   end;
end;
а оно мне в ответ:
Project Project1.exe raised exception class EIBInterBaseError with message 'Dynamic SQL Error
SQL error code = -206
Column unknown
d
At line 2, column 12'. Process stopped. Use Step or Run to continue.
уже по всякому пробывал и даже книжку читал. везде облом
хелп плз


Bolek   (2005-11-15 11:20:00) [1]


> Может быть
> IBQuery1.SQL.Add('where name = '''+Edit1.Text+'''');
> легче?

так уже пробывал - ругалось на несуществующую колонку


Sergey13   (2005-11-15 09:14:00) [2]

2[23] Deniz ©   (15.11.05 06:54)
> А ведь поправить регистр не так сложно:
А я и не утверждал обратного. 8-)


Id   (2005-11-15 08:28:00) [3]

>Bolek ©   (03.11.05 14:07)  
>     IBQuery1.SQL.Add('where name LIKE '+Edit1.Text);
Может быть
IBQuery1.SQL.Add('where name = '''+Edit1.Text+'''');
легче?


Deniz   (2005-11-15 06:54:00) [4]

> Sergey13 ©   (14.11.05 16:40) [21]
>
> Плюс - поиск у тебя регистрозависимый получился.


Так ведь и в условии задачи ничего сказано не было про регистр. А ведь поправить регистр не так сложно:

   ...
   IBQuery1.SQL.Add('where upper(name) LIKE :txt');
   IBQuery1.Prepare;
   IBQuery1.Params[0].AsString:='%' + AnsiUpperCase(Edit1.Text) + '%';
   ...


Bolek   (2005-11-14 16:50:00) [5]


> Sergey13 ©   (14.11.05 16:40) [21]
> Плюс - поиск у тебя регистрозависимый получился.

к сожалению, да.


Sergey13   (2005-11-14 16:40:00) [6]

Плюс - поиск у тебя регистрозависимый получился.


Sergey13   (2005-11-14 16:39:00) [7]

2 [19] Bolek ©   (14.11.05 16:30)
> т.е.?
Это и есть. Не будет индекс использоваться при LIKE '%Бла-Бла%'. При 'Бла-Бла%' будет, а так - нет.


Bolek   (2005-11-14 16:30:00) [8]


> Sergey13 ©   (14.11.05 16:14) [18]
> 2[17] Bolek ©   (14.11.05 16:05)
> Только индекс работать не будет при этом и находить будет

т.е.?
> не только с начала строки.
как раз и нужно чтобы искало по вхождению


Sergey13   (2005-11-14 16:14:00) [9]

2[17] Bolek ©   (14.11.05 16:05)
Только индекс работать не будет при этом и находить будет не только с начала строки.


Bolek   (2005-11-14 16:05:00) [10]

спасибо, Денис. твоё решение подошло больше.
куда из аськи пропал?

ЗЫ. закройте, плз, обсуждение


Deniz   (2005-11-07 11:42:00) [11]

...
    IBQuery1.Close;
    IBQuery1.SQL.Clear;
    IBQuery1.SQL.Add('select * from DVD_DISK ');
    IBQuery1.SQL.Add('where name LIKE :txt');
    IBQuery1.Prepare;
    IBQuery1.Params[0].AsString:='%' + Edit1.Text + '%';
    IBQuery1.Open;
И все.


Плохиш   (2005-11-07 11:08:00) [12]


> Bolek ©   (07.11.05 10:55) [14]
> откопал я решение:
> IBQuery1.SQL.Add('where name LIKE '+chr(39)+'%'+Edit1.Text+'%'+chr(39));

А теперь введи в Edit1 строку с апострофами.


Bolek   (2005-11-07 10:55:00) [13]

доброго времени суток всем
всем кто принимал участие спасибо
откопал я решение:
IBQuery1.SQL.Add('where name LIKE '+chr(39)+'%'+Edit1.Text+'%'+chr(39));


Desdechado   (2005-11-03 16:38:00) [14]

LIKE ... имеет свой формат обращения к данным
что из него присутствует в Edit.Text ?


msguns   (2005-11-03 16:27:00) [15]

1. Поставить Breakpoint перед Open
2. Скопировать запрос из TIBQuery.SQL в IBConsole/IBExpert и выполнить.
3. Посмотреть на результат, потаскать себя за уши и сказать "Ах, какой же я..."


Bolek   (2005-11-03 14:51:00) [16]

примечательно, что я в Едит писал именно ту буквицу, которая точно есть в поле


Val   (2005-11-03 14:49:00) [17]

тогда чувствительность к регистру символов.приводите к upper or lower обе части выражения.


Bolek   (2005-11-03 14:42:00) [18]


> Val ©   (03.11.05 14:40) [8]

пробывал. даже для чистоты эксперимента пробывал статический запрос делать. и нифига.


Val   (2005-11-03 14:40:00) [19]

>[6] Bolek ©   (03.11.05 14:33)
нам-то это понятно.что непонятно вам?
>[7] Bolek ©   (03.11.05 14:35)
запрос отрабатывает верно, видим не тот результат, который ожидаем, потому как проценты, подчеркивания не ставим.


Bolek   (2005-11-03 14:35:00) [20]


> msguns ©   (03.11.05 14:11) [1]
> IBQuery1.SQL.Add('where name LIKE '+QuotedStr(Edit1.Text));
>

хех.. не помогло - пишу в Edit буквицы, а в гриде вобще тогда ничего не становится. как только пусто - все записи


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо