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