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

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

Вопрос по SQL [D7, XP]


Мишаня ©   (2016-03-01 18:06:00) 

Здравствуйте мастера! Изучаю SQL, тестю на Firebird 2.5
Не работает вот такая конструкция:

IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('SELECT * FROM MYTABLE WHERE ((MYFIELD1 CONTAINING :Name_param1) or (MYFIELD2 CONTAINING :Name_param1)) and  (MYFIELD1=:Name_param2)');
IBQuery1.Params[0].AsString:=Edit1.Text;
IBQuery1.Params[1].AsString:=Edit2.Text;
if not IBQuery1.Prepared then IBQuery1.Prepare;
IBQuery1.Open;

Хотя совместные данные из эдитов точно есть в базе и должно показать результат, а ничего не находит... (((
Что делаю не так?


Кщд   (2016-03-02 07:40:00) [1]

>Мишаня   (01.03.16 23:16) [12]
>Избаловали народ SQL-ем... )))
SQL к данному вопросу никак не относится


Мишаня   (2016-03-01 23:16:00) [2]

Избаловали народ SQL-ем... )))


Мишаня   (2016-03-01 19:06:00) [3]

Всем спасибо за оперативные и ценные советы! ;)


Мишаня   (2016-03-01 18:30:00) [4]

Заработал первый вариант в другой редакции:

IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('SELECT * FROM MYTABLE WHERE ((MYFIELD1 CONTAINING :Name_param1) or (MYFIELD2 CONTAINING :Name_param1)) and  (MYFIELD1=:Name_param2)');
IBQuery1.ParamByName('Name_param1').AsString:=Edit1.Text;
IBQuery1.ParamByName('Name_param2').AsString:=Edit2.Text;
if not IBQuery1.Prepared then IBQuery1.Prepare;
IBQuery1.Open;

Теперь понятно где Муму зарыл Герасим...   )))


эндсоувот   (2016-03-01 18:27:00) [5]

В запросе не допускается повторение параметров?


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


Мишаня   (2016-03-01 18:25:00) [6]

Аааа.... Нужен ParamByName наверно... ))


эндсоувот   (2016-03-01 18:24:00) [7]

Для первого и второго данные подставляю через эдиты.

парамс по индексу ничего не знает про то, что где-то есть еще параметр с таким же именем.

по индексу же присваиваешь


Мишаня   (2016-03-01 18:24:00) [8]

В запросе не допускается повторение параметров?


Мишаня   (2016-03-01 18:22:00) [9]

Заработала такая конструкция:

IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('SELECT * FROM MYTABLE WHERE ((MYFIELD1 CONTAINING :Name_param1) or (MYFIELD2 CONTAINING :Name_param2)) and  (MYFIELD1=:Name_param3)');
IBQuery1.Params[0].AsString:=Edit1.Text;
IBQuery1.Params[1].AsString:=Edit1.Text;
IBQuery1.Params[2].AsString:=Edit2.Text;
if not IBQuery1.Prepared then IBQuery1.Prepare;
IBQuery1.Open;

Что в SQL не так с именами? Все-равно не понимаю почему первый вариант не пашет?


эндсоувот   (2016-03-01 18:22:00) [10]

для начала надо уяснить и не сомневаться в том, что если выборка пуста, то под условие where не попало ни одной записи.

после этого надо выдохнуть и начать искать то условие, которое отсекло ожидаемые записи.


Мишаня   (2016-03-01 18:17:00) [11]

Для первого и второго данные подставляю через эдиты.


Плохиш   (2016-03-01 18:12:00) [12]

В запросе три параметра


Мишаня   (2016-03-01 18:07:00) [13]

Вносил(смотрел) в IBExpert все...


Наверх

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