[firebase-br] (meio off)Erro ao retornar parametro DECIMAL de SP
Francis
francisodisi em brturbo.com
Dom Out 9 04:42:26 -03 2005
Olá!
Estou iniciando com SP's e criei uma SP para retornar os dados de um registro de uma tabela (no meu caso, CUSTOMER).
Criei a SP da seguinte maneira:
SET TERM ^ ;
CREATE PROCEDURE SELECT_CUSTOMER (
ID INTEGER)
RETURNS (
KIND VARCHAR(1),
NAME VARCHAR(80),
ADDRESS VARCHAR(40),
ADDRESS_COMPLEMENT VARCHAR(40),
DISTRICT VARCHAR(40),
CITY VARCHAR(40),
POSTCODE VARCHAR(12),
STATE_ID INTEGER,
COUNTRY_ID INTEGER,
PHONE_1 VARCHAR(18),
PHONE_2 VARCHAR(18),
EMAIL_ADDRESS VARCHAR(60),
HOME_PAGE VARCHAR(60),
CELEBRATION_DATE DATE,
LIMIT_CREDIT DECIMAL(13,2),
REG_DATE_TIME TIMESTAMP,
FANTASY_NAME VARCHAR(80),
CNPJ VARCHAR(20),
IE VARCHAR(20),
FAX VARCHAR(18),
ID_CARD VARCHAR(20),
CPF VARCHAR(20))
AS
BEGIN
/* Procedure Text */
SELECT
KIND, NAME, ADDRESS, ADDRESS_COMPLEMENT, DISTRICT, CITY, POSTCODE,
STATE_ID, COUNTRY_ID, PHONE_1, PHONE_2, EMAIL_ADDRESS, HOME_PAGE,
CELEBRATION_DATE, LIMIT_CREDIT, FANTASY_NAME, CNPJ, IE, FAX,
ID_CARD, CPF, REG_DATE_TIME
FROM
CUSTOMER
WHERE
ID = :ID
INTO
:KIND, :NAME, :ADDRESS, :ADDRESS_COMPLEMENT, :DISTRICT, :CITY, :POSTCODE,
:STATE_ID, :COUNTRY_ID, :PHONE_1, :PHONE_2, :EMAIL_ADDRESS, :HOME_PAGE,
:CELEBRATION_DATE, :LIMIT_CREDIT, :FANTASY_NAME, :CNPJ, :IE, :FAX,
:ID_CARD, :CPF, :REG_DATE_TIME;
SUSPEND;
END
^
SET TERM ; ^
Até aí tudo bem. A SP está certa e qdo executo ela através do IBExpert, tudo funciona perfeitamente.
Na tabela CUSTOMER tenho os sguintes registros (Vou definir apenas as colunas ID, NAME e LIMIT_CREDIT)
ID Name Limit_Credit
1 João 1000,00
2 Maria 1500,50
3 José 1250,56
Depois de criada a SP, fui fazer um teste com ela utilizando Delphi 7, com DBExpress.
Primeiramente utilizei um component TSQLQuey e na propriedade SQL coloquei o seguinte comando:
select name, limit_credit from select_customer (4)
OK!!! O comando está correto e a query retornou os valores corretos.
O problema vem agora!!!
Depois de utilizar o component TSQLQuery, resolvi testar utilizando um TSQLStordProc.
Defini a propriedade StoredProcName igual ao nome da SP criada anteriormente e implementei o seguinte código num TButton:
procedure TForm1.Button1Click(Sender: TObject);
begin
SQLStoredProc1.ParamByName('ID').Value := '3';
SQLStoredProc1.Prepared := True;
SQLStoredProc1.ExecProc;
showmessage(SQLStoredProc1.ParamByName('NAME').AsString);
showmessage(SQLStoredProc1.ParamByName('LIMIT_CREDIT').AsString);
end;
qdo a linha "showmessage(SQLStoredProc1.ParamByName('LIMIT_CREDIT').AsString);" foi executada o valor mostrado foi 1250,5, e não 1250,56, como está armazenado no DB.
Alguém poderia me dizer porque e como eu faço para resolver isso?? Já tentei trazer como asFloat, mas não funcionou.
Desculpem o off!!
Desde já agradeço!!!
Mais detalhes sobre a lista de discussão lista