![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача параметров для SQL-запроса
Novicer © (2014-01-29 12:56:00)Здравствуйте! Как правильно передать параметры запросу?
Для чисел:ParamByName('Col1').AsInteger :=5 или
ParamByName('Col1').Value :=5 или
ParamByName('Col1').Value :='5' ?
Для строк: ParamByName('Col2').AsString:='stroka' или
ParamByName('Col2').Value :='stroka'
Параметры нужно задавать после описания запроса?
clickmaker (2014-01-29 19:43:00) [21]ну если запрос сводится к вызову хранимки, то почему бы не воспользоваться специально обученным компонентом?
Novicer (2014-01-29 19:41:00) [22]Должен быть обязательно IbStoredProc?
Novicer (2014-01-29 19:40:00) [23]Тригер создал IbExpert
clickmaker (2014-01-29 19:34:00) [24]а почему не IBStoredProc?
Novicer (2014-01-29 19:34:00) [25]В базе две колонки(поля): ID и COL1, Integer(PrimaryKey,NotNull) и VarChar(200,NotNull) соответственно. Внес пару строк для примера в IbExpert. Пробую программно добавить еще пару, не выходит :(
Novicer (2014-01-29 19:30:00) [26]Будет работать без очистки и указания типов параметра?
Заголовок хранимки: PROCMAINLIST
Триггер(перед вставкой):
as
begin
if (new.id is null) then
new.id = gen_id(gen_mainlist_id,1);
end
Пока указывал явно значение в запросе,все работало. Переделал под параметры,начались ошибки... :(
Inovet (2014-01-29 19:09:00) [27]> [3] Novicer (29.01.14 15:43)
> IBQuery1.Params.Clear;
> IBQuery1.Params.CreateParam(ftString,'Name_param1',ptInput);
Это лишнее
> [5] Novicer (29.01.14 16:24)
> Хранимка:
Где заголовок?
И заодно триггер бы посмотреть.
Novicer (2014-01-29 16:24:00) [28]Хранимка:
begin
if (:fin_id < 0) then
begin
insert into MAINLIST(COL1)
values (:FIN_COL1);
end
else
begin
update
MAINLIST
set
COL1=:FIN_COL1
where
id = :fin_id;
end
end
Novicer (2014-01-29 15:55:00) [29]Для первичного ключа использую триггер с генератором
Novicer (2014-01-29 15:43:00) [30]Cделал хранимку в базе для внесения/изменения данных. При выполнении получаю ошибку validation error fo column COL1, value "*** null ***"
Тип данных для колонки в базе VARCHAR(200,NotNull). Выполняю так:
IBQuery1.SQL.Text := 'execute procedure PROCMAINLIST(-1,:Name_param1);
IBQuery1.Params.Clear;
IBQuery1.Params.CreateParam(ftString,'Name_param1',ptInput);
IBQuery1.ParamByName('Name_param1').AsString :='значение';
Transaction.StartTransaction;
ExecSQL;{тут вылетает ошибка}
Почему дает ошибку непонятно :(
clickmaker (2014-01-29 13:21:00) [31]> AsInteger :=5 или
> ParamByName('Col1').Value
чтобы почувствовать разницу, рекомендую заглянуть в исходник VCL.
Там вообще много чего интересного можно подсмотреть
RWolf (2014-01-29 13:15:00) [32]AsInteger.
После (до заполнения SQL их не существует, и ParamByName вызывать бессмысленно).