Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1135085285
Я Виктор
2005-12-20 16:28
2006.01.08
Универсальный проигрыватель


14-1133450740
Kerk
2005-12-01 18:25
2006.01.08
Приглашение в orkut


1-1133492829
Петр
2005-12-02 06:07
2006.01.08
Как подгрузить dll, написанную в Delphi в проект CBuilder?


2-1135170842
kizam
2005-12-21 16:14
2006.01.08
компаненты для toolbar-a


14-1134380249
Piter
2005-12-12 12:37
2006.01.08
Умер Роберт Шекли





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский