[firebase-br] Problema com Firebird 2.1

Carlos H. Cantu listas em warmboot.com.br
Qui Nov 20 21:10:35 -03 2008


Sua UDF não está escrita corretamente. O tema é muito extenso para
escrever num email. Sugiro que você pesquise os artigos sobre UDFs que
estão disponíveis na internet, ou se tiver algum dos meus livros,
ambos têm um capítulo dedicado ao assunto.

PS: Sobre a procedure funcionar com o FB 1.5 e não com o 2.1, tem algo
"cheirando" mal aí, mas baseado só nas informações que vc passou, eu
não sei o que é. O FB sempre trata "," como separador de milhar,
portanto 20,00 seria entendido como 20.000

[]s
Carlos H. Cantu
www.warmboot.com.br - www.firebirdnews.org
www.FireBase.com.br - blog.firebase.com.br

R> Boa Noite a Todos...
R> Estou com o seguinte problema,
R> Migrei o Firebird 1.5 para o 2.1 e algumas procedures que funcionavam bem
R> antes agora estao com problemas:
R> Ex.  tenho um Cast(VTotal as Numeric(8,2))

R> onde VTotal é um Varchar(20) com a string 20,00.

R> Quando vai converter exibe erro.
R> Overflow occurred during data type conversion.conversion error from string
R> "20,00".

R> Dae se mudar para 20.00 funciona.

R> Entao resolvi fazer uma UDF pra fazer a conversão, fiz do seguinte modo:

R> na unit Func:

R> unit Func;

R> interface

R> function TrocaVirgPonto(Valor: string): string; cdecl; export;

R> implementation

R> function TrocaVirgPonto(Valor: string): string;
R> var  i: integer;
R> begin
R>      try
R>      for i := 1 to Length(Valor) do
R>      if Valor[i] = ',' then
R>      Valor[i] := '.';
R>      except
R>      //
R>      end;
R>      Result := valor;
R> end;

R> end.

R> e no projeto:

R> library Funcoes;
R> uses
R>   SysUtils,
R>   Classes,
R>   IB_Utils,
R>   Func in 'Func.pas';

R> {$R *.res}

R> exports
R> TrocaVirgPonto;

R> begin
R> end.

R> no registro fiz assim:
R> declare external function Func
R> cstring(64)
R> returns cstring(64) free_it
R> entry_point 'TrocaVirPonto' module_name 'Funcoes.dll"';


R> Só que sempre que vou usar a função cai o servidor Firebird...

R> Se alguem puder dar uma ajuda...

R> Atenciosamente,
R> Rodrigo






Mais detalhes sobre a lista de discussão lista