Fórum UDF para Tirar Acento #41123

23/12/2003

0

Pessoal bom dia, tenho uma função em delphi 5.0 que troca as Letras acentuadas pela mesma sem Acento, porém preciso fazer a consulta no banco e preciso que retorne todos os registros igual ao passado no parâmetro ex. se eu passar Joao ou João como Parâmetro o sistema deve me retornar João e Joao, pois bem tenho esta DLL funcionando em uma aplicação sem banco que fiz como teste e funciona perfeitamente porém ao registrar a Função no banco, colocar a DLL no diretório UDF quando eu executo um select direto no banco o mesmo esta caindo, abaixo estou enviando o código da DLL e como declarei no banco se alguém puder me ajudar eu agradeço.

DECLARE EXTERNAL FUNCTION Tira_Acento
CSTRING(256) CHARACTER SET NONE
RETURNS VARCHAR(256) CHARACTER SET NONE FREE_IT
ENTRY_POINT ´Tira_Acento´ MODULE_NAME ´Acento´;

library Acento;
uses
ShareMem,
SysUtils,
Forms,
dialogs,
Classes;

{$R *.RES}

function Tira_Acento( str: String ): String; Export;Stdcall;
var
i: Integer;
begin
for i := 1 to Length(str) do
case str[i] of
´á´: str[i] := ´a´;
´é´: str[i] := ´e´;
´í´: str[i] := ´i´;
´ó´: str[i] := ´o´;
´ú´: str[i] := ´u´;
´à´: str[i] := ´a´;
´è´: str[i] := ´e´;
´ì´: str[i] := ´i´;
´ò´: str[i] := ´o´;
´ù´: str[i] := ´u´;
´â´: str[i] := ´a´;
´ê´: str[i] := ´e´;
´î´: str[i] := ´i´;
´ô´: str[i] := ´o´;
´û´: str[i] := ´u´;
´ä´: str[i] := ´a´;
´ë´: str[i] := ´e´;
´ï´: str[i] := ´i´;
´ö´: str[i] := ´o´;
´ü´: str[i] := ´u´;
´ã´: str[i] := ´a´;
´õ´: str[i] := ´o´;
´ñ´: str[i] := ´n´;
´ç´: str[i] := ´c´;
´Á´: str[i] := ´A´;
´É´: str[i] := ´E´;
´Í´: str[i] := ´I´;
´Ó´: str[i] := ´O´;
´Ú´: str[i] := ´U´;
´À´: str[i] := ´A´;
´È´: str[i] := ´E´;
´Ì´: str[i] := ´I´;
´Ò´: str[i] := ´O´;
´Ù´: str[i] := ´U´;
´Â´: str[i] := ´A´;
´Ê´: str[i] := ´E´;
´Î´: str[i] := ´I´;
´Ô´: str[i] := ´O´;
´Û´: str[i] := ´U´;
´Ä´: str[i] := ´A´;
´Ë´: str[i] := ´E´;
´Ï´: str[i] := ´I´;
´Ö´: str[i] := ´O´;
´Ü´: str[i] := ´U´;
´Ã´: str[i] := ´A´;
´Õ´: str[i] := ´O´;
´Ñ´: str[i] := ´N´;
´Ç´: str[i] := ´C´;
end;
Result := str;

End;
Exports
Tira_Acento;

begin
end.


Ari

Ari

Responder

Posts

11/02/2004

Bruno Tafarelo

E ai cara blz

Acho que tenho a solução para seu problema, eu estava com o mesmo problema. Criava a dll testava no delphi e funciona, depois coloca no IB e dava pau, ai garimpando ontem na net, achei alguns exemplos de UDFs. Então fiz o seguinte na minha:

- Troquei a cláusula stdCall por cdecl
- Depois disso, ao invéns da função retornar String, mandei retornar PChar isso para nós não muda em nada, mas deve mudar para o IB pois só assim consegui executar minha UDF.


Bem espero ter ajudado

Abraço[/url]


Responder

Gostei + 0

11/02/2004

Bruno Tafarelo

E ai cara blz

Acho que tenho a solução para seu problema, eu estava com o mesmo problema. Criava a dll testava no delphi e funciona, depois coloca no IB e dava pau, ai garimpando ontem na net, achei alguns exemplos de UDFs. Então fiz o seguinte na minha:

- Troquei a cláusula stdCall por cdecl
- Depois disso, ao invéns da função retornar String, mandei retornar PChar isso para nós não muda em nada, mas deve mudar para o IB pois só assim consegui executar minha UDF.


Bem espero ter ajudado

Abraço


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar