![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Firebird + FIBPlus + stored procedure [D5, Firebird]
Sheriff © (2004-09-15 08:42:00)Здравствуйте! Помогите, пожалуйста, решить проблему:
есть хранимая процедура:
CREATE PROCEDURE GETALLNAMES (
DIS DOUBLE PRECISION,
DELTA DOUBLE PRECISION)
RETURNS (
NNAME VARCHAR(20),
DNAME VARCHAR(20))
AS
begin
for
SELECT N.fullname, DI.code
FROM TBL_INFO DI, TBL_ND N, TBL_DV D
WHERE (ABS(DI.fullvalue - :DIS) <= :DELTA) AND (N.ID = DI.ndid) AND (D.ID = DI.dvid)
INTO :NNAME, :DNAME
do begin
suspend;
end
end
в IBExpert процедура работает правильно и возвращает набор из нужных записей.
в Delphi:
использую TpFIBStoredProc
Proc1.Sql.Text:='select * from GETALLNAMES(?dis, ?delta)';
Proc1.ParamByName('dis').Value:=Tmp;
Proc1.ParamByName('delta').Value:=0.5;
if not Proc1.Prepared then Proc1.Prepare;
Proc1.ExecQuery;
так вот проблема в том, что всегда возвращается только 1 запись.
а те же входные параметры при запуске в IBExpert возвращают несколько. Подскажите в чем проблема? Спасибо.
Роман Снегирев (2004-09-15 13:10:00) [1]ты почитай для начала help по фибам, там же ясно сказано, что для всех конструкций возвращающих наборы данных надо использовать TpFIBDataSet. pFIBQuery и pFIBStoredProc для другого совсем предназначены.
Sheriff (2004-09-15 11:45:00) [2]спасибо всем!
мда... если кому интересно:
это мои кривые ручки...
в свойствах TpFIBStoredProc стояло qoAutoCommit=true.
TohaNik (2004-09-15 10:30:00) [3]>но использовать на каждую ХП DataSet как-то претит.
А претит почему;)
Он- DataSet- хороший!
Sheriff (2004-09-15 09:48:00) [4]pFIBDataSet1.Close;
pFIBDataSet1.ParamByName('dis').Value:=StrToFloat(Edit1.Text);
pFIBDataSet1.ParamByName('delta').Value:=StrToFloat(Edit2.Text);
pFIBDataSet1.Open;
Это работает, но использовать на каждую ХП DataSet как-то претит. Не зря ведь есть TpFIBStoredProc и TpFIBQuery...
Sheriff (2004-09-15 09:45:00) [5]TpFIBQuery пробовал... результат тот же.
выяснилась одна странность:
после выполнения процедуры закрываются все наборы данных.
соединение с базой сохраняется.
TohaNik (2004-09-15 09:28:00) [6]С DataSet-ом ИМХО удобней
Заведи обычный DataSet
select <выходные пар-ры>
from GETALLNAMES(?par1,par2?)
Digitman (2004-09-15 09:27:00) [7]
> Sheriff © (15.09.04 08:57) [2]
а зачем тогда тебе TpFIBStoredProc, если ты явное select-выражение формируешь ? Ну и пользуй в этом случае непосредственно TpFIBQuery !
Sheriff (2004-09-15 08:57:00) [8]Proc1.StoredProcName:='GETALLNAMES';
присвоено в инспекторе, а свойствоOpen в FIBStoredProc только для чтения. Именно не метод, а свойство...
(FIBPlus 5.1.0)
Digitman (2004-09-15 08:51:00) [9]Proc1. StoredProcName:='GETALLNAMES';
if not Proc1.Prepared then Proc1.Prepare;
Proc1.ParamByName('dis').Value:=Tmp;
Proc1.ParamByName('delta').Value:=0.5;
Proc1. Open;