![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамический запрос [D7, IB6.x]
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 буквицы, а в гриде вобще тогда ничего не становится. как только пусто - все записи