[firebase-br] PROBLEMAS COM UDF - URGENTE!!!!

Pha-Lista lista em pha.com.br
Qui Jun 30 15:29:38 -03 2005


Existem algumas regas para criar UDFs, aconselho voce a baixar uma biblioteca ja pronta e usa-la com exemplo, pois acho que voce esta violando algumas.

Algumas:
  1) Uma UDF deve estar protegita por try except para nao derrubar o servidor

  2) Voce deve utilizar uma funcao espeficica para alocar memoria, se nao estou enganado e IB_Malloc

  3) Acho que comparacao deveria se NULL ou #0 e nao nil.

PS: Faz tempo que nao lido com UDFs, por isso posso estar equivocado em alguma coisa.

PHA
Nova Odessa / SP - Brazil
-----Mensagem original-----
From: Evandro Paloschi epaloschi em yahoo.com.br
Date: Thu, 30 Jun 2005 15:54:52 -0300
To: lista em firebase.com.br
Subject: [firebase-br] PROBLEMAS COM UDF - URGENTE!!!!

> Olá Amigos,
>  
>     Criamos uma UDF que recebe 3 parametros PChar e devolve a concatenação dos mesmos. O problema é que quando passamos valores nulos para a UDF está derrubando a conexão com o FIREBIRD.
>  
>     Alguém saberia o porque que a UDF está derrubando a conexão??? Tem algo a ver com os valores nulos Se for isto como posso codificar minha UDF, pois ela foi criada com o proposito de devolver os parametros concatenados, mesmo que algum deles fosse nulo.
>  
>     Abaixo segue o codigo da UDF em delphi e a sua declaração no banco.
>  
> function Udf_DescrItem( DescrItem, DescrLin, DescrCol: PChar ): PChar;
> var
>   StrRet: string;
> begin
>   StrRet := '';
>   if  ( DescrItem <> nil ) and ( StrLen(DescrItem) > 0 ) then
>       StrRet := ( StrRet + DescrItem + ' ' )
>   {endif};
>   if  ( DescrLin <> nil ) and ( StrLen(DescrLin) > 0 ) then
>       StrRet := ( StrRet + DescrLin + ' ' )
>   {endif};
>   if  ( DescrCol <> nil ) and ( StrLen(DescrCol) > 0 ) then
>       StrRet := ( StrRet + Trim(DescrCol) )
>   {endif};
>   Result := RetornaString( PChar( StrRet ) );
> end;
> function RetornaString( Texto: PChar ): PChar;
> var
>   Tamanho: DWord;
> begin
>   Tamanho := StrLen( Texto ) + 1;
>   Result := GetMemory( Tamanho );
>   if  Tamanho = 1 then
>       Result[0] := #0
>   else
>       Move( Texto^, Result^, Tamanho )
>   {endif};
> end;
> 
> /*  External Function declarations */
> DECLARE EXTERNAL FUNCTION UDF_DESCRITEM
> CSTRING(50) CHARACTER SET WIN1252, CSTRING(30) CHARACTER SET WIN1252, CSTRING(30) CHARACTER SET WIN1252
> RETURNS CSTRING(112) CHARACTER SET WIN1252 FREE_IT
> ENTRY_POINT 'Udf_DescrItem' MODULE_NAME 'RGLibUdf';
>  
>  
> Desde já,
>  
> Agradeço.
> 
> __________________________________________________
> Converse com seus amigos em tempo real com o Yahoo! Messenger 
> http://br.download.yahoo.com/messenger/ 
> ______________________________________________
> 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