sexta-feira, 8 de janeiro de 2010

Uso do Translate do Oracle

Recebi uma solicitação de um cliente da empresa manifestando problemas com o recurso de recuperar senha do site. Quando os usuários entravam com as informações pessoais para cadastrar uma nova senha, todos os nomes que apresentavam acentuação apresentavam problemas. A solução foi fazer uma função que acertava as informações alterando os caracteres com acentos para que ficassem sem acentos. Mas ainda foi preciso usar a função Translate do Oracle (banco de dados usado na aplicação em questão) para evitar problemas caso alguma informação estivesse com acentuação no banco de dados. Desta forma a validação acontecerá nos dois lados, na entrada de dados do usuário no formulário e no banco de dados.
A função para a validação no formulário de entrada de dados do cliente foi a seguinte:

function LimparString(txt)

Dim xc, xs, saida, posicao, caract, X
xc = "àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñÑ'"
xs = "aaaaaeeeeiiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN"
saida = ""
If txt <> "" then
For X = 1 To Len(txt)
caract = Mid(txt,X,1)
posicao = InStr(xc,caract)
If posicao > 0 Then
caract = mid(xs,posicao,1)
end if
saida = saida & caract
Next
LimparString = saida
End If
end function

...

E a string sql com o Translate ficou assim:

strSQL = "select CodProfissional from prof where NumCartao = '"&numeroCartao&"' and translate(NomeCliente,'ãáéêíóõúçÃÁÉÍÓÕÚÇãáéêíóõúçÃÁÉÍÓÕÚÇ','aaeeiooucAAEIOOUC') = '"&nomeCompleto&"' and Cpf = "&cpf&" and DataNascimento = to_date('"&sortDate(dataNascimento)&"') and translate(NomeMae,'ãáéêíóõúçÃÁÉÍÓÕÚÇãáéêíóõúçÃÁÉÍÓÕÚÇ','aaeeiooucAAEIOOUC') = '"&nomeMae&"'"

O funcionamento do Translate substitui cada caracter do segundo parametro, pelos respectivos caracteres do terceiro parametro, na string do campo do primeiro parametro.

Nenhum comentário:

Postar um comentário