BUSCA DINAMICA
Pessoal, em um campo da tabela eu tenho gravado u texto que pode estar assim:
0679-02-275-1
ou assim:
0679.02.275-1
ou ainda assim:
0679022751
A pergunta é, em um textbox eu digito qualquer uma dessas opções e o codigo de busca faz a comparação com o que esta gravado no campo, se o numero que digitei é igual ao do campo sem os outros caracteres ele me da o resultado. Como montar essa rotina para comparar os dados?
0679-02-275-1
ou assim:
0679.02.275-1
ou ainda assim:
0679022751
A pergunta é, em um textbox eu digito qualquer uma dessas opções e o codigo de busca faz a comparação com o que esta gravado no campo, se o numero que digitei é igual ao do campo sem os outros caracteres ele me da o resultado. Como montar essa rotina para comparar os dados?
Em SQLServer....
SELECT <<CAMPOS>>
FROM <<TABELA>>
WHERE REPLACE(REPLACE(campo, [ô].[ô],[ô][ô]),[ô]-[ô],[ô][ô]) = REPLACE(REPLACE(campo_input, [ô].[ô],[ô][ô]),[ô]-[ô],[ô][ô])
Desculpe-me o banco é access.
Desculpa... No access é igual.
Tentei assim:
.Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE REPLACE(REPLACE(Desenho, [ô].[ô],[ô][ô]),[ô]-[ô],[ô][ô]) = REPLACE(REPLACE(TxtBusca.text, [ô].[ô],[ô][ô]),[ô]-[ô],[ô][ô])ORDER BY LM_2[Ô]
deu erro:
(Função replace indefinida na expressão)
.Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE REPLACE(REPLACE(Desenho, [ô].[ô],[ô][ô]),[ô]-[ô],[ô][ô]) = REPLACE(REPLACE(TxtBusca.text, [ô].[ô],[ô][ô]),[ô]-[ô],[ô][ô])ORDER BY LM_2[Ô]
deu erro:
(Função replace indefinida na expressão)
é....como consulta fica dificil...
tem duas opções....
uma é consultar os primeiros 4 elementos (isso se sempre suas pontuações estiverem apos o 4o digito)
depois joga em uma variavel e compara...
o cód seria +- isso
result= resultado de sua busca
result=format(result,[Ô]@@@@@@@@@@[Ô]) [ô]pega só os numeros
if result = textbusca then [ô]textbusca ==> somente numeros
msgbox [Ô]CONSULTA Finalizada[Ô]
else
Busca_proximo_registro
endif
AGORA
a melhor solução é vc criar uma consulta em seu BD e converter todos estes textos em NUMERO
tem duas opções....
uma é consultar os primeiros 4 elementos (isso se sempre suas pontuações estiverem apos o 4o digito)
depois joga em uma variavel e compara...
o cód seria +- isso
result= resultado de sua busca
result=format(result,[Ô]@@@@@@@@@@[Ô]) [ô]pega só os numeros
if result = textbusca then [ô]textbusca ==> somente numeros
msgbox [Ô]CONSULTA Finalizada[Ô]
else
Busca_proximo_registro
endif
AGORA
a melhor solução é vc criar uma consulta em seu BD e converter todos estes textos em NUMERO
Eu acredito que o maior problema está na entrada dos dados isto deve ser formatado, para ser igual em todas situações se não vc poderá ter problema de desenpenho se tiver que ficar alterando tudo toda vez que for consultar.
mude a forma como salva os dados coloque uma formatação unica
quanto a query tente isto
tente desta forma
no txtNumero nà o coloque os sinais nem pontos apenas numeros
mude a forma como salva os dados coloque uma formatação unica
quanto a query tente isto
.Source = [Ô]SELECT REPLACE(REPLACE(Desenho, [ô].[ô],[ô][ô]),[ô]-[ô],[ô][ô]) As NumDesenho ,LM_2 FROM DadosCab WHERE NumDesenho = [ô][Ô] & txtNumero.Text & [Ô][ô] ORDER BY LM_2[Ô]
tente desta forma
no txtNumero nà o coloque os sinais nem pontos apenas numeros
Corrige ai pois vc mandou o nome do campo como instrução e não o valor dele.....
Corrigi o código. Copia e cola para ver se funciona
Corrigi o código. Copia e cola para ver se funciona
Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE REPLACE(REPLACE(Desenho, [ô].[ô],[ô][ô]),[ô]-[ô],[ô][ô]) = REPLACE(REPLACE([Ô] & TxtBusca.text & [Ô], [ô].[ô],[ô][ô]),[ô]-[ô],[ô][ô])ORDER BY LM_2[Ô]
E ai??? Funcionou???
Se já teve a sua dúvida solucionada, fecha o tópico e pontua quem te ajudou.
Vlw
Se já teve a sua dúvida solucionada, fecha o tópico e pontua quem te ajudou.
Vlw
Primeiramente eu acredito que a resposta do MARCELO_TREZE deve resolver.
Outra coisa que deve ser feita é a retirada da formatação no banco.
Outra coisa que deve ser feita é a retirada da formatação no banco.
[Ô]Segundamente[Ô], se for SQLServer, a Solução do Marcelo não funciona...
[Ô]Terceiramente[Ô], o dado pode estar gravado e pode ser digitado de qualquer forma, por isso o tratamento do dado deve ser sempre no WHERE...
E por [Ô]últimamente[Ô], a retirada da formatação no Banco de Dados vai depender de todos os acessos a esse dado. Se existem mais sistemas que acessam, com certeza contam com algum tipo de formatação (ou a falta dela) assim, retirar a formatação requeriria uma série de perguntas anteriores à mudança. Sem dúvida, a padronização seria o ideal mas....
E finalmente, acabei [Ô]acabadamente[Ô]
[Ô]Terceiramente[Ô], o dado pode estar gravado e pode ser digitado de qualquer forma, por isso o tratamento do dado deve ser sempre no WHERE...
E por [Ô]últimamente[Ô], a retirada da formatação no Banco de Dados vai depender de todos os acessos a esse dado. Se existem mais sistemas que acessam, com certeza contam com algum tipo de formatação (ou a falta dela) assim, retirar a formatação requeriria uma série de perguntas anteriores à mudança. Sem dúvida, a padronização seria o ideal mas....
E finalmente, acabei [Ô]acabadamente[Ô]
Tópico encerrado , respostas não são mais permitidas