[firebase-br] Problema com Firebird 2.1

Eduardo Bahiense eduardo em icontroller.com.br
Qui Nov 20 21:14:32 -03 2008


Tente assim:

Cast(REPLACE(VTotal, ',', '.') as Numeric(8,2))


Eduardo


Rodrigo escreveu:
> Boa Noite a Todos...
> Estou com o seguinte problema,
> Migrei o Firebird 1.5 para o 2.1 e algumas procedures que funcionavam bem
> antes agora estao com problemas:
> Ex.  tenho um Cast(VTotal as Numeric(8,2))
> 
> onde VTotal é um Varchar(20) com a string 20,00.
> 
> Quando vai converter exibe erro.
> Overflow occurred during data type conversion.conversion error from string
> "20,00".
> 
> Dae se mudar para 20.00 funciona.
> 
> Entao resolvi fazer uma UDF pra fazer a conversão, fiz do seguinte modo:
> 
> na unit Func:
> 
> unit Func;
> 
> interface
> 
> function TrocaVirgPonto(Valor: string): string; cdecl; export;
> 
> implementation
> 
> function TrocaVirgPonto(Valor: string): string;
> var  i: integer;
> begin
>     try
>     for i := 1 to Length(Valor) do
>     if Valor[i] = ',' then
>     Valor[i] := '.';
>     except
>     //
>     end;
>     Result := valor;
> end;
> 
> end.
> 
> e no projeto:
> 
> library Funcoes;
> uses
>  SysUtils,
>  Classes,
>  IB_Utils,
>  Func in 'Func.pas';
> 
> {$R *.res}
> 
> exports
> TrocaVirgPonto;
> 
> begin
> end.
> 
> no registro fiz assim:
> declare external function Func
> cstring(64)
> returns cstring(64) free_it
> entry_point 'TrocaVirPonto' module_name 'Funcoes.dll"';
> 
> 
> Só que sempre que vou usar a função cai o servidor Firebird...
> 
> Se alguem puder dar uma ajuda...
> 
> Atenciosamente,
> Rodrigo
> 
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: 
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 





Mais detalhes sobre a lista de discussão lista