Форум: "Базы";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
ВнизПараметры IBStoredProc Найти похожие ветки
← →
Sirruf (2003-12-16 19:40) [0]На сервере есть большое количество хранимых процедур. Я использую для них один компонент IBStoredProc (IBX), динамически меняю свойство StoredProcName, затем пишу
UnPrepare;
ParamByName("...") := XXX;
..........................
Prepare;
ExecProc;
Процедуры должны вставлять данные в таблицу, однако этого не происходит. Вопрос: нужно ли динамически создавать параметры в IBStoredProc или они все-таки генерятся автоматически? И как в этом случае быть с UnPrepare..Prepare? Куски кода приветствуются.
← →
____Nikolay (2003-12-16 21:01) [1]Я использовал FIB там все нормально, параметры автоматически создаются
← →
Rad (2003-12-16 21:13) [2]Кстати, TIBStoredProc - вещь очень странная и непредсказуемая.
Мне лично, правда, с ним почти не пришлось работать - но вот гораздо более авторитетные люди даже статью написали по этому поводу: http://www.ibase.ru/devinfo/ibstp.htm
← →
Zacho (2003-12-16 21:14) [3]Вот пример их хелпа.
{ Set all input parameters to an empty string }
with IBStoredProc1 do
for I := 0 to ParamCount - 1 do
if (Params[I].ParamType = ptInput) or
(Params[I].ParamType = ptInputOutput) then
Params[I].AsString := "";
UnPrepare перед присвоением параметров и Prepare после - не нужен, и даже вреден.
А если у тебя процедура не работает - или ошибка в процедуре, или Commit не делаешь.
← →
Vemer (2003-12-17 11:53) [4]Вариант - объединить процедуры в несколько и вызывать с указанием "номера функции" в параметре.
← →
Sirruf (2003-12-17 12:39) [5]А что, если переделать под dbExpress или BDE? В этом случае нужно делать StoredProc1.Params.CreateParam или нет?
← →
Johnmen (2003-12-17 12:43) [6]>Sirruf © (17.12.03 12:39)
Что за странные поползновения ? Может сразу на ADO ??? :)
← →
Sirruf (2003-12-17 12:53) [7]В статье http://www.ibase.ru/devinfo/ibstp.htm ясно сказано о глючности TIBStoredProc. Вот это меня и подвигло к таким поползновениям.
← →
Johnmen (2003-12-17 13:07) [8]Если едешь на машине и чувствуешь, что какое-то колесо "бьёт", то не приходит в голову сменить машину ?
:)
← →
Sirruf (2003-12-17 13:33) [9]Сменить машину в данном случае означает переход на другой компилятор. А пробитое колесо - это ИМХО TIBStored, с которым надо что-то решать.
Commit делаю, данные не вставляются, хотя и ошибку не выдает.
← →
Жук (2003-12-17 13:35) [10]Предлагаю заменить "IBStoredProc" на "IBSQL" с соответствующим запросом.
← →
Sirruf (2003-12-17 13:43) [11]Дело в том, что при вставке записи, моя процедура возвращает в выходном параметре ID вставленной записи, который потом используется в программе.
CREATE PROCEDURE GETPROCESSORID (
IN_PRODUCER VARCHAR(10),
IN_MODEL VARCHAR(20),
IN_FREQUENCY INTEGER)
RETURNS (
OUT_ID SMALLINT)
AS
DECLARE VARIABLE PROCID INTEGER;
begin
select ID from Processors
where (PRODUCER = :in_producer) and (MODEL = :in_model) and (FREQUENCY = :in_frequency)
into :ProcID;
if (not :ProcID is null) then
Out_ID = :ProcID;
else /* if :ProcID is null */
begin
ProcID = gen_id(gen_processors, 1);
insert into Processors values
(:ProcID, :in_producer, :in_model, :in_frequency);
Out_ID = :ProcID;
end
suspend;
end
← →
Johnmen (2003-12-17 13:56) [12]Как осуществляется вызов сей процедуры ? Код ?
← →
Sirruf (2003-12-17 14:07) [13]var
Producer, Model: String;
Freqeuncy: Integer;
with dmData.GetIDProc do {GetIDProc-имя компонента IBStoredProc}
begin
StoredProcName := "GETPROCESSORID";
Unprepare;
try
ParamByName("In_Producer").Value := Producer;
ParamByName("In_Model").Value := Model;
ParamByName("In_Frequency").Value := Frequency;
Prepare;
ExecProc;
ProcID := ParamByName("Out_ID").AsSmallint;
except
ProcID := 0;
end; {except}
end; {with}
← →
Johnmen (2003-12-17 14:12) [14]>Sirruf © (17.12.03 14:07)
1. Про Unprepare; уже говорили.
2. Нигде не указаны типы параметров.
← →
Sirruf (2003-12-17 14:21) [15]Проще говоря, Unprepare убрать вместе с Prepare на фиг, правильно я понял?
Компонент GetIDProc каждый раз привязывается к новой хранимой процедуре посредством изменения его свойства StoredProcName. Чтобы указать типы параметров, нужно их создать, что-то вроде GetIDProc.Params.CreateParam, так ведь? У меня сомнения в том, создаются ли эти параметры автоматически в GetIDProc или их надо вручную создавать с помощью CreateParam?
← →
Johnmen (2003-12-17 14:26) [16]1. Unprepare;
2. StoredProcName := "GETPROCESSORID";
3. Prepare;
4. ParamByName....
5. ExecProc;
...
← →
Vemer (2003-12-17 17:00) [17]Вариант - сгруппировать все ХП в несколько или одну и вызывать по номеру, как функции (через доп. параметр).
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c