Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rodrigo Lemela

Replace em query ASP

Recommended Posts

Bom dia a todos,

 

Estou com um grande problema nas mãos...

Possuo um sistema que foi feito em ASP, com banco de dados em Access...

E a página em questão mostra todos os nomes dos dentistas cadastrados no banco, com um "Dr." e "Dra." na frente...

Porém, o cliente insiste em fazer a organização em ordem alfabetica...

Seria fácil, mas o cliente quer que seja ordenado independentemente do "Dr." e "Dra."...

Ou seja:

 

Dr. A

Dra. A

Dr. B

 

E so consegui pensar no Replace dentro da query do Access...

Porém, ele me retorna um erro...

 

Alguem saberia como contornar isso ?

 

Obrigado antecipadamente,

Rodrigo Lemela Duarte

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo de explicação:

 

Uma função que parece ser bem simples, porém nem todos sabem utilizar por completa.

Nesse artigo vou mostrar como usar corretamente e com eficiência essa "simples função".

 

Todos nós programadores ASP sabemos usar simplificada a função Replace(), segue um exemplo:

 

<%
dim frase
frase = "Por uma internet sempre criativa e dinâmica"
response.write(replace(frase, "sempre", "mais"))
%>

Uma maneira simples, usamos o texto que está em pauta seguido da palavra que queremos substituir e depois da palavra que queremos colocar no lugar.

 

replace(texto em pauta, palavra que sai, palavra que entra)

Resultado o Script: "Por uma internet mais criativa e dinâmica"

 

OBS: a função replace() é "Case Sensitive" se quiser substituir "A" por "a", onde existir o "A" maiúsculo será substituído pelo "a" minúsculo.

 

Vamos para a parte que interessa mais:

No texto "Por uma internet mais criativa e dinâmica" queremos que a letra "i" de "internet" seja maiúscula e não as outras, como fazer isso?

Seguindo essa sequência "replace(texto em pauta, palavra que sai, palavra que entra)", existem mais três parâmetros opicionais que complementam a função:

 

* Posição inicial;

* Count (um contador que especifica o número de substituíção);

* Comparador de Strings (caso binário de padrão "zero" ou texto).

 

Segue o exemplo:

<%
dim frase
frase = "Por uma internet mais criativa e dinâmica"
response.write(replace(frase, "i", "I", 1,1,1))
%>

Resultado do Script: "Por uma Internet mais criativa e dinâmica"

 

No parâmentro inicial você também pode usar ele como um "cortador de letras", exemplo: Eu não quero mais que apareça a palavra "Por", então cortamos três letras da frase, caso queira cortar o espaço também e usar quatro no contador fiquem a vontade, mais para isso usamos a função trim() que não vem ao caso.

 

Segue o exemplo:

 

 

 

<%
dim frase
frase = "Por uma internet mais criativa e dinâmica"
response.write(replace(frase, "u", "U", 4,1,1))
%>

Resultado do Script: "Uma internet mais criativa e dinâmica"

 

Notem que coloquei no valor da posição o número "4" (quatro) e explicarei por que.

O valor padrão da posição inicial vem de default "1" (um) e não "0" (zero) como estamos acostumados em outras funções por isso adicionamos mais um valor no contador no caso "3 + 1".

 

E o que falar da última posição o "Comparador de Strings")

 

Olha como funciona:

Segue o exemplo:

 

 

<%
dim frase
frase = "Elegante"
response.write(replace(frase, "e", "€", 1,1,0))
%>

Se eu deixar o valor inicial como "1" (um), e pegar só uma letra "e" e colocar no Comparador de Strings "0" (zero) o resultado sai:

Resultado do Script: "El€gante"

 

Ele não considerou a letra maiúscula "E" inicial, mais se eu trocar o último parâmentro para "1" (um), vamos ver no que gera.

 

Segue o exemplo:

 

 

<%
dim frase
frase = "Elegante"
response.write(replace(frase, "e", "€", 1,1,1))
%>

Resultado do Script: "€legante"

Ele agora sim reconhece o primeiro "e" e faz a alteração, tenha muito cuidado quando for usar o Comparador de Strings, oks?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então,

 

Obrigado pela resposta...

Mas o Replace do ASP em si, eu sei...

 

O problema é o replace dentro de uma query...

Segue a query normal:

SELECT nome, especialidade, endereco, Bairro, regiao, telefone FROM tabLogin WHERE ativo = 1 and cidade = '" & rs("cidade") & "' and tipo = 'Dentista' ORDER BY nome

 

A query que eu preciso que funcione:

SELECT REPLACE(REPLACE(nome, "Dr.", ""), "Dra.", ""), especialidade, endereco, Bairro, regiao, telefone FROM tabLogin WHERE ativo = 1 and cidade = '" & rs("cidade") & "' and tipo = 'Dentista' ORDER BY nome

 

Me retorna um erro na hora que eu tento executa-la...

Alguem sabe resolver isso ?

 

Segue meu provider: Provider=Microsoft.Jet.OLEDB.4.0;

 

Valeu gente.

 

Obs: Uma observação muito válida é que dentro do Access, o software, essa query funcionou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta gerando algum erro ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Erro gerado:

 

Microsoft JET Database Engine error '80040e14'

Syntax error (missing operator) in query expression 'REPLACE(REPLACE(nome, "Dr.", "), "Dra.", "), especialidade, endereco, Bairro, regiao, telefone FROM tabLogin WHERE ativo = 1 and cidade = '' and tipo = 'Dentista' ORDER BY nome'.

 

/rede_credenciada.asp, line 56

 

A linda do erro é o .Execute da conexão.

 

Obs: No Access, essa mesma query, funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim

TiraDR = nome
TiraDR = Replace(TiraDR,"Dr.","")
TiraDR = Replace(TiraDR,"Dra.","")

SELECT TiraDR, especialidade, endereco, Bairro, regiao, telefone FROM tabLogin WHERE ativo = 1 and cidade = '" & rs("cidade") & "' and tipo = 'Dentista' ORDER BY nome

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim

TiraDR = nome
TiraDR = Replace(TiraDR,"Dr.","")
TiraDR = Replace(TiraDR,"Dra.","")

SELECT TiraDR, especialidade, endereco, Bairro, regiao, telefone FROM tabLogin WHERE ativo = 1 and cidade = '" & rs("cidade") & "' and tipo = 'Dentista' ORDER BY nome

 

[]'s

 

TiraDR = nome
TiraDR = Replace(TiraDR,"Dr.","")
TiraDR = Replace(TiraDR,"Dra.","")

Isso daqui seria o replace do ASP ?

Não entendi o que você quis dizer com isso...

Rs...

Anyway, valeu pela resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

kkkk é replace sim, mais agora que me liguei kkkkkk em relação ao replace esta certinho funcionaria, mais no Select o sistema não funciona assim.

 

O jeito seria você criar uma outra tabela para colocar esses dr. e dra. e na hora do Order by ir pelo nome, outra forma eu desconheço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

kkkk é replace sim, mais agora que me liguei kkkkkk em relação ao replace esta certinho funcionaria, mais no Select o sistema não funciona assim.

 

O jeito seria você criar uma outra tabela para colocar esses dr. e dra. e na hora do Order by ir pelo nome, outra forma eu desconheço.

 

ASDHAKSJDHSAKJDHASKJHD

Excelente... Rs...

 

Entendi...

Mas ai ficaria mto gambiarrento...

rs...

 

Anyway, valeu pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

select * from tablogin

...

while not rs.eof

 

TiraDR = rs("nome")

TiraDR = Replace(TiraDR,"Dr.","")

TiraDR = Replace(TiraDR,"Dra.","")

 

SELECT especialidade, endereco, Bairro, regiao, telefone FROM tabLogin WHERE id='"&rs("id")&"' and ativo = 1 and cidade = ....

 

response.write "<td>Nome:" &tiradr&"</td><td>" &rs1("endereco") ....

 

....

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que neste caso vai torar o dr. e o dra. porém não vai listar pelos nomes rsrsrs pela lógica o dr. ou seja os doutores sempre vão vir na frente dos dra. as doutoras, talvez exista uma forma de fazer este processo pelo like na busca pelos resultados, porém eu desconheço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

select * from tablogin

...

while not rs.eof

 

TiraDR = rs("nome")

TiraDR = Replace(TiraDR,"Dr.","")

TiraDR = Replace(TiraDR,"Dra.","")

 

SELECT especialidade, endereco, Bairro, regiao, telefone FROM tabLogin WHERE id='"&rs("id")&"' and ativo = 1 and cidade = ....

 

response.write "<td>Nome:" &tiradr&"</td><td>" &rs1("endereco") ....

 

....

 

Então kra...

O que ninguem ta entendendo é que eu preciso tirar os Drs. e Dras. na hora do Select...

Para que ele consiga fazer a ordenação corretamente...

Caso contrario, será igual ao que o Patrick falou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entender, nós entendemos, a solução que não é simples :)

 

Andei pesquisando no mysql e achei isto:

 

http://dev.mysql.com/doc/refman/5.5/en/regexp.html#operator_regexp

 

trata-se de usar expressões regulares no select

 

Creio que se usar uma expressão regular no order by excluindo o dr. dra deve funcionar como deseja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entender, nós entendemos, a solução que não é simples :)

 

Andei pesquisando no mysql e achei isto:

 

http://dev.mysql.com/doc/refman/5.5/en/regexp.html#operator_regexp

 

trata-se de usar expressões regulares no select

 

Creio que se usar uma expressão regular no order by excluindo o dr. dra deve funcionar como deseja.

 

Rs...

Tudo bem, desculpe pela generalização...

 

Mas, o Access aceita REGEXP ?

rs...

Enfim, alguem manja de REGEXP ?

Eu vou tentar aqui, mas não manjo muito, se alguem puder dar uma força, ficaria mto agradecido...

 

Obrigado a todos que contribuiram,

Rodrigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se o access suporta regexp, essa vou ficar devendo.

 

Acho que o patrique postou um artigo sobre regexp ou na parte de artigos ou no laboratorio de scripts, não me lembro ao certo, mas sei que tem um bem explicado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se o access suporta regexp, essa vou ficar devendo.

 

Acho que o patrique postou um artigo sobre regexp ou na parte de artigos ou no laboratorio de scripts, não me lembro ao certo, mas sei que tem um bem explicado

 

Obrigado de qualquer jeito...

 

Vou dar uma pesquisada...

Sou pessimo para regex... :/

 

Valeu, se alguem souber de algo, por favor, me avise.

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao cheguei a ler tudo, mas você esta fazendo errado

 

Dr. e Dra. nunca vem na frente do nome, você deve ter uma tbl com SEXO e caso seja M = dr se for F = dra

 

 

 

 

você deveria rodar uma função pra apagar o Dr da frente do nome com base no sexo

 

isso ate melhora a performance do sistema

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testa com essa SQL:

SELECT REPLACE(REPLACE([nome], "Dra.", ""), "Dr.", "") as Nomes, especialidade, endereco, Bairro, regiao, telefone FROM tabLogin WHERE ativo = 1 and cidade = '" & rs("cidade") & "' and tipo = 'Dentista' ORDER BY Nomes;

 

Caso não funcione troque as " aspas por ' aspa simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.