RES: [firebase-br] StoredProcedure x DBX x Delphi ( SOLUCAO )

Antonio Carlos a.lima.silva em terra.com.br
Qua Jun 22 12:19:24 -03 2005


Não sei se a forma como resolvi foi a mais elegante, mas ate o momento dos
testes realizados esta funcionado.
Fiz assim :

1 - Na storeprocedure a variavel de retorno deixou de ser numeric(10,3) e
passou a ser varchar(14)
declare variable traz_qtd as numeric(10,3);

select emb_qtd from embalagem where emb_cod =:codigo into :traz_qtd;
if ( traz_qtd is null ) then
  retorno = '0.000';
else
  retorno = cast( traz_qtd as varchar(14));

2 - no aplicativo

var
 q : string;

 q := SQLStoredProc.params[1].asstring;

 campo currency ou variavel := ConverteString(q);

A funcao esta abaixo, peguei uma funcao popular na internet e anexei a outra
, foi necessario usa-la pois o cast traz no decimal separador o ponto ao
inves da virgula.

É isso ai, nao sei se é a forma mais elegante mas ta funcionando


function ConverteString(a:string):currency;
var
 b : string;
 k : TFormatSettings;
   function BuscaTroca(Text,Busca,Troca : string) : string;
   var n : integer;
   begin
      for n := 1 to length(Text) do
        begin
            if Copy(Text,n,1) = Busca then
              begin
                 Delete(Text,n,1);
                 Insert(Troca,Text,n);
              end;
        end;
     Result := Text;
end;

begin
 b := BuscaTroca(a,'.',',');
 k.CurrencyDecimals := 3;
 try
  Result := StrToCurr(b);
 except
 on Exception : EConvertError do
      ShowMessage(Exception.Message);
 end;
end;



----- Original Message ----- 
From: "Euler Jr." <euler em siginformatica.com.br>
To: "Antonio Carlos" <a.lima.silva em terra.com.br>; "FireBase"
<lista em firebase.com.br>
Sent: Wednesday, June 22, 2005 10:15 AM
Subject: Re: RES: [firebase-br] StoredProcedure x DBX x Delphi


> Use
> Format('%10.3f',[3.25099992752075]);
>
> = 3.251
>
> []s
> Euler Jr.
>
> ----- Original Message -----
> From: "Antonio Carlos" <a.lima.silva em terra.com.br>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Wednesday, June 22, 2005 10:05 AM
> Subject: Re: RES: [firebase-br] StoredProcedure x DBX x Delphi
>
>
>> Fiz EXATAMENTE como vc sugeriu e
>>
>> var
>>  e : Extended;
>>
>> e:= SQLStoredProc.params[1].asFloat;
>>
>> Sabe como 3,251 é amostrado em um ShowMessage(FloatToStr(e));
>>
>> = 3,25099992752075
>>
>>
>> ----- Original Message -----
>> From: "Euler Jr." <euler em siginformatica.com.br>
>> To: "FireBase" <lista em firebase.com.br>
>> Sent: Wednesday, June 22, 2005 9:26 AM
>> Subject: Re: RES: [firebase-br] StoredProcedure x DBX x Delphi
>>
>>
>> > Antonio,
>> >
>> > Troque o parametro de saida da sua stored procedure para float:
>> >
>> > create procedure ... returns (valor float) ...
>> >
>> > Fiz um teste, utilizando DBExpress e TSQLStoredProc e funcionou legal.
>> > Criei uma sp que retorna o valor 3.578 e no Delphi vc define:
>> >
>> > Na propriedade Params da sp:
>> > NumericScale = 3
>> > Precision = 3
>> > DataType = ftFloat
>> > Value.Type = Double
>> >
>> > E ao executar:
>> > // v eh do tipo extended
>> > v := sp.Params[ 0 ].AsFloat;
>> >
>> > retorna v = 3.578
>> >
>> > Se quiser posso te mandar um email com o metadata e unit.
>> >
>> > []s
>> > Euler Jr.
>> > ----- Original Message -----
>> > From: "Pha-Lista" <lista em pha.com.br>
>> > To: "Juliano Pezzini" <juliano.pezzini em gmail.com>; "FireBase"
>> > <lista em firebase.com.br>
>> > Sent: Wednesday, June 22, 2005 7:40 AM
>> > Subject: Re: RES: [firebase-br] StoredProcedure x DBX x Delphi
>> >
>> >
>> >> Seria melhor entao retornar como Float.
>> >>
>> >> O correto seria achar o problema, tente o driver da UIB, se for
> problema
>> > do driver do DBX o erro nao ocorrera, mais sempre ha uma maneira de
>> > contornar ou eliminar o erro, primeiro voce tem que achar a causa.
>> >>
>> >> Voce ja tentou atraves do IBX, para ver se ocorre o mesmo?
>> >>
>> >> PHA
>> >> Nova Odessa / SP - Brazil
>> >>
>> >> -----Mensagem original-----
>> >> From: Juliano Pezzini juliano.pezzini em gmail.com
>> >> Date: Wed, 22 Jun 2005 00:34:28 -0300
>> >> To: FireBase lista em firebase.com.br
>> >> Subject: Re: RES: [firebase-br] StoredProcedure x DBX x Delphi
>> >>
>> >> > Pq vc não retorna o campo do tipo varchar??
>> >> >
>> >> > É, eu sei que é gambia, mas essa galera que fez o dbx tb fez um
>> >> > monte
>> >> > de gambia e ninguém fala nada!! oras.......
>> >> >
>> >> > t+
>> >> >
>> >> > Juliano
>> >> >
>> >> > On 6/21/05, Adilson B.  Cápua Jr. <juniorcapua em yahoo.com.br> wrote:
>> >> > > Cara,
>> >> > >
>> >> > >        Se você consegui resolver isso, por favor, entre em contato
>> >> > > comigo...
>> >> > >        Certa vez fiquei babando no computador quase que uma semana
>> > tentan> do
>> >> > > descobrir um erro numa rotina de caixa que eu tenho no meu
>> >> > > sistema.
> O
>> >> > > problema
>> >> > > era exatamente igual ao seu, ou seja, o danado do SQLStoredProc
>> > retornava>  um
>> >> > > valor totalmente errado (em se tratando dos centavos). Por
>> >> > > exemplo,
>> > 20,45
>> >> > > ele
>> >> > > trazia 20,40... A única solução que achei na época (e até hoje >
>> >> > > eu
>> > uso assim)
>> >> > > foi criar um campo de apoio numa tabela geral do banco e o saldo
>> > gerado e> ra
>> >> > > jogado para essa tabela e logo depois eu buscava via select mesmo!
>>> >> > > funcionou
>> >> > > certo... Hoje, eu evito que as SP's retornem valores para o
> programa.
>> > Sem> pre
>> >> > > tento a solução de outro jeito...
>> >> > >        Li a thread sobre o assunto e não sei se você está usando a
>>
>> > tal da
>> >> > > função
>> >> > > que citaram... Se estiver, lhe peço que entre em contato para que
>> > possa> mos
>> >> > > tentar resolver isso juntos...
>> >> > >
>> >> > >        Forte abraço,
>> >> > >
>> >> > >
>> >> > > +---------------------------------------+
>> >> > >  Adilson Bragança Cápua Jr.
>> >> > >  Linhares - ES             Brasil
>> >> > >
>> >> > >  mailto    : juniorcapua em yahoo.com.br
>> >> > >              juniorcapua em gmail.com
>> >> > >  Mobile    : abcjr em oi.com.br
>> >> > >  Messenger : juniorcapua em hotmail.com
>> >> > >  Blogger   : www.dellas.rg3.net
>> >> > > +---------------------------------------+
>> >> > >  Save a tree! Send an e-mail!
>> >> > > -----Mensagem original-----
>> >> > > De: lista-bounces em firebase.com.br
>> > [mailto:lista-bounces em firebase.com.br] > Em
>> >> > > nome de Antonio Carlos
>> >> > > Enviada em: terça-feira, 21 de junho de 2005 15:48
>> >> > > Para: Pha-Listas; FireBase
>> >> > > Assunto: [firebase-br] StoredProcedure x DBX x Delphi
>> >> > >
>> >> > > Pessoal estou ficando QUASE louco, tenho uma store procedute que
> deve
>> >> > > reornar uma quantidade em uma tabela definido o campo como
>> > NUMERIC(10,3)
>> >> > >
>> >> > > CREATE PROCEDURE QTD_EMB (
>> >> > >    CODEMB VARCHAR (3) CHARACTER SET WIN1252) RETURNS (
>> >> > >    VALOR NUMERIC (10, 3),
>> >> > >    DESCRICAO VARCHAR (20) CHARACTER SET WIN1252) AS
>> >> > >
>> >> > > Rodo ela no EMS Mananger e passado o valor por exemplo : 001 o
>> > retorono > é
>> >> > > 3.253 mas o resultado no SQLStoredProc :
>> > SQLStoredProc.Params[1].asCurren> cy
>> >> > > é 3,2
>> >> > >  e nao adiantou NADA eu colocar  SQLStoredProc.Params[1].asBCD ou
>> > asDoubl> e
>> >> > > mexi ate no params do SQLStoredProc mas nao adianta.
>> >> > > Alguem sabe porque isso e como resolve ?
>> >> > > Vi no Google uma referencia a  DecimalRounding_JH0 como sendo uma
>> >> > > unit
>> > qu> e
>> >> > > corrige isso, consegui ate baixa-la mas ao acrescenta-la ao
>> >> > > projeto
>> >> > > já
>> >> nao
>> >> > > consigo compilar o sistema dando como erro o dataModule, li o
>> >> > > texto
>> >> > > em
>> > an> exo
>> >> > > mas nao vi nenhuma instucao especial para isso.
>> >> > >
>> >> > > Alguma luz por favor
>> >> > >
>> >> > >
>> >> > >
>> >> > > ______________________________________________
>> >> > > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para
>> > edi> tar
>> >> > > sua configuração na lista, use o endereço
>> >> > > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> >> > > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > >
>> >> > > _______________________________________________________
>> >> > > Yahoo! Acesso Grátis - Internet rápida e grátis.
>> >> > > Instale o discador agora! http://br.acesso.yahoo.com/
>> >> > >
>> >> > >
>> >> > > ______________________________________________
>> >> > > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>> >> > > Para editar sua configuração na lista, use o endereço
> http://mail.f>
>> > irebase.com.br/mailman/listinfo/lista_firebase.com.br
>> >> > > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>> >> > >
>> >> >
>> >> > ______________________________________________
>> >> > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>> >> > Para editar sua configuração na lista, use o endereço
>> > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> >> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>> >>
>> >>
>> >> ______________________________________________
>> >> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>> >> Para editar sua configuração na lista, use o endereço
>> > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> >> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>> >>
>> >
>> >
>> > ______________________________________________
>> > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>> > Para editar sua configuração na lista, use o endereço
>> > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>> >
>> >
>>
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>
>
>






Mais detalhes sobre a lista de discussão lista