Форум: "Базы";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
ВнизДинамический запрос Найти похожие ветки
← →
Bolek © (2005-11-03 14:07) [0]Доброго вренмени суток.
формирую динамический запрос следующим образом
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.
уже по всякому пробывал и даже книжку читал. везде облом
хелп плз
← →
msguns © (2005-11-03 14:11) [1]IBQuery1.SQL.Add("where name LIKE "+QuotedStr(Edit1.Text));
← →
Val © (2005-11-03 14:24) [2]>Bolek © (03.11.05 14:07)
заметьте, вы используете одинаковые строки кода в обеих, исключающих друг-друга, ветках - не наводит на мысли?
← →
Sergey13 © (2005-11-03 14:25) [3]Лучше переделать запрос на статический c 2 параметрами.
select * from DVD_DISK
where (:flag=0) or (:flag=1 and name LIKE :name)
← →
Bolek © (2005-11-03 14:27) [4]
> заметьте, вы используете одинаковые строки кода в обеих,
> исключающих друг-друга, ветках - не наводит на мысли?
т.е.?
← →
Val © (2005-11-03 14:31) [5]т.е. они выполняются всегда. зачем они в ветках?
← →
Bolek © (2005-11-03 14:33) [6]подразумевалось, что если в Edit будет пусто, то пусть все записи возьмёт; а если не пусто, то выбор по вхождению текста из Edit
← →
Bolek © (2005-11-03 14:35) [7]
> msguns © (03.11.05 14:11) [1]
> IBQuery1.SQL.Add("where name LIKE "+QuotedStr(Edit1.Text));
>
хех.. не помогло - пишу в Edit буквицы, а в гриде вобще тогда ничего не становится. как только пусто - все записи
← →
Val © (2005-11-03 14:40) [8]>[6] Bolek © (03.11.05 14:33)
нам-то это понятно.что непонятно вам?
>[7] Bolek © (03.11.05 14:35)
запрос отрабатывает верно, видим не тот результат, который ожидаем, потому как проценты, подчеркивания не ставим.
← →
Bolek © (2005-11-03 14:42) [9]
> Val © (03.11.05 14:40) [8]
пробывал. даже для чистоты эксперимента пробывал статический запрос делать. и нифига.
← →
Val © (2005-11-03 14:49) [10]тогда чувствительность к регистру символов.приводите к upper or lower обе части выражения.
← →
Bolek © (2005-11-03 14:51) [11]примечательно, что я в Едит писал именно ту буквицу, которая точно есть в поле
← →
msguns © (2005-11-03 16:27) [12]1. Поставить Breakpoint перед Open
2. Скопировать запрос из TIBQuery.SQL в IBConsole/IBExpert и выполнить.
3. Посмотреть на результат, потаскать себя за уши и сказать "Ах, какой же я..."
← →
Desdechado © (2005-11-03 16:38) [13]LIKE ... имеет свой формат обращения к данным
что из него присутствует в Edit.Text ?
← →
Bolek © (2005-11-07 10:55) [14]доброго времени суток всем
всем кто принимал участие спасибо
откопал я решение:
IBQuery1.SQL.Add("where name LIKE "+chr(39)+"%"+Edit1.Text+"%"+chr(39));
← →
Плохиш © (2005-11-07 11:08) [15]
> Bolek © (07.11.05 10:55) [14]
> откопал я решение:
> IBQuery1.SQL.Add("where name LIKE "+chr(39)+"%"+Edit1.Text+"%"+chr(39));
А теперь введи в Edit1 строку с апострофами.
← →
Deniz © (2005-11-07 11:42) [16]...
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;
И все.
← →
Bolek © (2005-11-14 16:05) [17]спасибо, Денис. твоё решение подошло больше.
куда из аськи пропал?
ЗЫ. закройте, плз, обсуждение
← →
Sergey13 © (2005-11-14 16:14) [18]2[17] Bolek © (14.11.05 16:05)
Только индекс работать не будет при этом и находить будет не только с начала строки.
← →
Bolek © (2005-11-14 16:30) [19]
> Sergey13 © (14.11.05 16:14) [18]
> 2[17] Bolek © (14.11.05 16:05)
> Только индекс работать не будет при этом и находить будет
т.е.?
> не только с начала строки.
как раз и нужно чтобы искало по вхождению
← →
Sergey13 © (2005-11-14 16:39) [20]2 [19] Bolek © (14.11.05 16:30)
> т.е.?
Это и есть. Не будет индекс использоваться при LIKE "%Бла-Бла%". При "Бла-Бла%" будет, а так - нет.
← →
Sergey13 © (2005-11-14 16:40) [21]Плюс - поиск у тебя регистрозависимый получился.
← →
Bolek © (2005-11-14 16:50) [22]
> Sergey13 © (14.11.05 16:40) [21]
> Плюс - поиск у тебя регистрозависимый получился.
к сожалению, да.
← →
Deniz © (2005-11-15 06:54) [23]> Sergey13 © (14.11.05 16:40) [21]
>
> Плюс - поиск у тебя регистрозависимый получился.
Так ведь и в условии задачи ничего сказано не было про регистр. А ведь поправить регистр не так сложно:
...
IBQuery1.SQL.Add("where upper(name) LIKE :txt");
IBQuery1.Prepare;
IBQuery1.Params[0].AsString:="%" + AnsiUpperCase(Edit1.Text) + "%";
...
← →
Id (2005-11-15 08:28) [24]>Bolek © (03.11.05 14:07)
> IBQuery1.SQL.Add("where name LIKE "+Edit1.Text);
Может быть
IBQuery1.SQL.Add("where name = """+Edit1.Text+"""");
легче?
← →
Sergey13 © (2005-11-15 09:14) [25]2[23] Deniz © (15.11.05 06:54)
> А ведь поправить регистр не так сложно:
А я и не утверждал обратного. 8-)
← →
Bolek © (2005-11-15 11:20) [26]
> Может быть
> IBQuery1.SQL.Add("where name = """+Edit1.Text+"""");
> легче?
так уже пробывал - ругалось на несуществующую колонку
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.008 c