UDF para Tirar Acento
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.
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
Curtidas 0
Respostas
Bruno Tafarelo
23/12/2003
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]
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]
GOSTEI 0
Bruno Tafarelo
23/12/2003
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
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
GOSTEI 0