Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

Firebird + FIBPlus + stored procedure   Найти похожие ветки 

 
Sheriff ©   (2004-09-15 08:42) [0]

Здравствуйте! Помогите, пожалуйста, решить проблему:
есть хранимая процедура:
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 возвращают несколько. Подскажите в чем проблема? Спасибо.


 
Digitman ©   (2004-09-15 08:51) [1]

Proc1.StoredProcName:="GETALLNAMES";
if not Proc1.Prepared then Proc1.Prepare;
Proc1.ParamByName("dis").Value:=Tmp;
Proc1.ParamByName("delta").Value:=0.5;
Proc1.Open;


 
Sheriff ©   (2004-09-15 08:57) [2]

Proc1.StoredProcName:="GETALLNAMES";
присвоено в инспекторе, а свойство Open в FIBStoredProc только для чтения. Именно не метод, а свойство...
(FIBPlus 5.1.0)


 
Digitman ©   (2004-09-15 09:27) [3]


> Sheriff ©   (15.09.04 08:57) [2]



а зачем тогда тебе TpFIBStoredProc, если ты явное select-выражение формируешь ? Ну и пользуй в этом случае непосредственно TpFIBQuery !


 
TohaNik ©   (2004-09-15 09:28) [4]

С DataSet-ом ИМХО удобней

Заведи обычный DataSet

select <выходные пар-ры>
from GETALLNAMES(?par1,par2?)


 
Sheriff ©   (2004-09-15 09:45) [5]

TpFIBQuery пробовал... результат тот же.
выяснилась одна странность:
после выполнения процедуры закрываются все наборы данных.
соединение с базой сохраняется.


 
Sheriff ©   (2004-09-15 09:48) [6]

pFIBDataSet1.Close;
 pFIBDataSet1.ParamByName("dis").Value:=StrToFloat(Edit1.Text);
 pFIBDataSet1.ParamByName("delta").Value:=StrToFloat(Edit2.Text);
 pFIBDataSet1.Open;

Это работает, но использовать на каждую ХП DataSet как-то претит. Не зря ведь есть TpFIBStoredProc и TpFIBQuery...


 
TohaNik ©   (2004-09-15 10:30) [7]

>но использовать на каждую ХП DataSet как-то претит.
А претит почему;)
Он- DataSet- хороший!


 
Sheriff ©   (2004-09-15 11:45) [8]

спасибо всем!
мда... если кому интересно:
это мои кривые ручки...
в свойствах TpFIBStoredProc стояло qoAutoCommit=true.


 
Роман Снегирев   (2004-09-15 13:10) [9]

ты почитай для начала help по фибам, там же ясно сказано, что для всех конструкций возвращающих наборы данных надо использовать TpFIBDataSet. pFIBQuery и pFIBStoredProc для другого совсем предназначены.



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
8-1090012914
кактусбел
2004-07-17 01:21
2004.10.10
Как добавить текст в jpeg фаил и сохранить его не испортив


9-1086630621
Elf
2004-06-07 21:50
2004.10.10
Математика+OpenGL


4-1094710880
turich
2004-09-09 10:21
2004.10.10
Помогите с диалап соединением


14-1095628442
Yanis
2004-09-20 01:14
2004.10.10
Не могу ветку про бесплатный доступ к сайту найти :)


4-1094650844
Новишок
2004-09-08 17:40
2004.10.10
Закрыть программку, нажав на кнопу в сыоей проге