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!
> Aí
>> >> > > 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