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

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

Передача параметров для SQL-запроса


Страницы:   1 2

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 вызывать бессмысленно).


Страницы:   1 2

Наверх

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