[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