[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