Procedure nao esta retornando o valor

Delphi

29/06/2004

Caros amigos, nao aguento mais apanhar desse jeito, alguem me ajude ou eu desisto de procedures, infelizmente, pois achei a ideia genial...

Bom estou usando Firebird 1.5 criei uma procedure da seguinte forma:
=============================================
CREATE PROCEDURE PROC_SOMAITEM (
NOTA_NUMERO INTEGER,
NOTA_DATA DATE)
RETURNS (
VALOR_TOTITEM DOUBLE PRECISION)
AS
BEGIN
SELECT SUM(ITEM_QTDE * ITEM_VALUNIT) as valor_totitem FROM nfa_itemnota
WHERE NOTA_NUMERO = :nota_numero and NOTA_DATA = :nota_data
INTO :valor_totitem;
EXIT;
END
=============================================
blz, testei passando parametros no IBEXPERT, deu o resultado que eu queria, funcionou blz...,mas...

qdo. vou para o delphi faço o seguinte:
=============================================
SQLProc1.Prepared:=True;
try
SQLProc1.Params[0].AsInteger:= StrToInt(FlatEdit1.Text);
SQLProc1.Params[1].AsDateTime:= StrToDateTime(FlatMaskEdit1.Text);
SQLProc1.ExecProc;
FlatSpinEditFloat1.Value:=SQLProc1.Params[2].AsFloat;
finally
SQLProc1.Prepared:=False;
end;
=============================================
simplesmente, nao acontece nada, nao tem resultado de nada..., o que pode estar acontecendo, meus amigos e minhas amigas de desenvolvimento...


Duarteol

Duarteol

Curtidas 0

Respostas

Everton

Everton

29/06/2004

Colega, faça a seguinte alteração:

============================================= 
CREATE PROCEDURE PROC_SOMAITEM ( 
NOTA_NUMERO INTEGER, 
NOTA_DATA DATE) 
RETURNS ( 
VALOR_TOTITEM DOUBLE PRECISION) 
AS 
BEGIN 
SELECT SUM(ITEM_QTDE * ITEM_VALUNIT) as valor_totitem FROM nfa_itemnota 
WHERE NOTA_NUMERO = :nota_numero and NOTA_DATA = :nota_data 
INTO :valor_totitem; 
/* EXIT;  <<<<<<<------ Substitua pela linha abaixo */
SUSPEND;
END 
============================================= 



GOSTEI 0
Duarteol

Duarteol

29/06/2004

continua da mesma forma, nao da o resultado e nem da erro...engraçado que no ibexpert eu testo e da certo, passo os parametros e ele da o resultado...como pode...?


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

29/06/2004

acho que não há retorno porque essa é uma procedure ´selecionável´.
faça um teste:

instancie um componente SQLDataSet ao invés de SQLProc. na instrução coloque ´Select * from PROC_SOMAITEM( :Nota, :Data )´.

depois faça:
SQLDataset.ParamByName(´Nota´).AsInteger := StrToInt(FlatEdit1.Text);
SQLDataset.ParamByName(´Data´).AsDateTime := StrToDateTime(FlatMaskEdit1.Text);
SQLDataset.Open;
FlatSpinEditFloat1.Value := SQLDataset.FieldByName(´VALOR_TOTITEM´).AsFloat;

acho que é isso...


GOSTEI 0
Duarteol

Duarteol

29/06/2004

amigao, obrigado mesmo, mas ja consegui resolver com o StoreProc1 o que estava acontecendo, era que tinha que passar os parametros como strings, somente isso, ai deu certo, obrigado...vlw....


GOSTEI 0
POSTAR