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