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

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

Как правильно передать параметры запросу? [D7, XP]


Вован Петрович ©   (2014-10-26 13:52:00) 

Так:

  IBQuery1.SQL.Text:='SELECT * FROM MyTable WHERE MyField=:Name_param1 ';
  IBQuery1.ParamByName('Name_param1').AsString := Edit1.text;
  if not IBQuery1.Prepared then IBQuery1.Prepare;
  IBQuery1.Open;
 
или так:

  IBQuery1.SQL.Text:='SELECT * FROM MyTable WHERE MyField=:Name_param1 ';
  IBQuery1.Params[0].AsString := Edit1.text;
  if not IBQuery1.Prepared then IBQuery1.Prepare;
  IBQuery1.Open;

В чем разница между ParamByName('Name_param1').AsString  и Params[0].AsString ?


Kilkennycat   (2014-10-27 11:24:00) [1]


> Вован Петрович   (27.10.14 09:53) [5]
> Я думал компилятор игнорирует пробелы.

правильно думал.
но это вообще не компилятор обрабатывает, ему эт просто строка, а движок бд пробелы любит.


icWasya   (2014-10-27 10:32:00) [2]

Кроме того, некоторые движки SQL не умеют обрабатывать параметры, которые встречаются несколько раз. Например, если :NameParam встретится в тексте запроса два раза, то парсер будет считать, что это два разных параметра, хотя и с одинаковыми именами.(повторяю только некоторые базы, может быть в последних версиях исправлено) И в таком случае обращение по имени будет работать неправильно.


Вован Петрович   (2014-10-27 09:53:00) [3]

Я думал компилятор игнорирует пробелы. Выходит они значимы для переменных?


Kilkennycat   (2014-10-26 15:13:00) [4]

WHERE MyField= :Name_param1


Kilkennycat   (2014-10-26 15:12:00) [5]

пробел перед двоеточием поставь.


Вован Петрович   (2014-10-26 14:28:00) [6]

Почему тогда если писать IBQuery1.ParamByName('Name_param1').AsString := Edit1.text вылетает ошибка Name_param1 not found? При втором способе все ОК


Kilkennycat   (2014-10-26 14:19:00) [7]


> В чем разница между ParamByName('Name_param1').AsString
>  и Params[0].AsString ?

в удобстве понимания. понять, глядя на ноль, что это 'Name_param1' довольно-таки сложно.
кроме того, если точно известно, что нужен 'Name_param1' а его там нет, то это можно будет отловить. в случае с прямым указанием пофиг имя.
ну и если порядок в массиве будет нарушен, то тоже кака будет.


Наверх

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