BUSCA DINAMICA 02
Bom, consegui uma alternativa, vai ficar bem grande mas preciso de ajuda. O codigo abaixo me retorna o seguinte:
Se digito no TextBusca 0679023481 vai formatar para 0679-02-348-1 e buscar corretamente. Agora lá no banco pode estra assim como exemplo:
0178-2-82-1 ou 01782821
eu teria que contar sempre a quant de caracteres e formatar colocando o (-). Precisaria de uma função que faça isso.
pode extir um texto com 11 caracteres = 0178-2-82-1, neste caso não precisaria formatação
se fosse com 08 caracteres 01782821, ai formataria para 0178-2-82-1
se fosse com 13 caracteres 0679-02-580-1, neste caso não precisaria formatação.
se fosse com 10 caracteres 0679025811, ai formataria para 0679-02-580-1.
Dim PrimeiraPart As String
Dim SegundaPart As String
Dim Data As String
Dim Result As String
Dim strSQL As String
Data = TxtBusca.text
If Len(TxtBusca.text) = 10 Then
PrimeiraPart = Mid$(Data, 1, 4)
SegundaPart = Mid$(Data, 5, 2)
TerceiraPart = Mid$(Data, 7, 3)
QuartaPart = Mid$(Data, 10, 1)
End If
Result = PrimeiraPart & [Ô]-[Ô] & SegundaPart & [Ô]-[Ô] & TerceiraPart & [Ô]-[Ô] & QuartaPart
.Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE Desenho like [ô]%[Ô] & Result & [Ô]%[ô] ORDER BY LM_2[Ô]
Se digito no TextBusca 0679023481 vai formatar para 0679-02-348-1 e buscar corretamente. Agora lá no banco pode estra assim como exemplo:
0178-2-82-1 ou 01782821
eu teria que contar sempre a quant de caracteres e formatar colocando o (-). Precisaria de uma função que faça isso.
pode extir um texto com 11 caracteres = 0178-2-82-1, neste caso não precisaria formatação
se fosse com 08 caracteres 01782821, ai formataria para 0178-2-82-1
se fosse com 13 caracteres 0679-02-580-1, neste caso não precisaria formatação.
se fosse com 10 caracteres 0679025811, ai formataria para 0679-02-580-1.
Dim PrimeiraPart As String
Dim SegundaPart As String
Dim Data As String
Dim Result As String
Dim strSQL As String
Data = TxtBusca.text
If Len(TxtBusca.text) = 10 Then
PrimeiraPart = Mid$(Data, 1, 4)
SegundaPart = Mid$(Data, 5, 2)
TerceiraPart = Mid$(Data, 7, 3)
QuartaPart = Mid$(Data, 10, 1)
End If
Result = PrimeiraPart & [Ô]-[Ô] & SegundaPart & [Ô]-[Ô] & TerceiraPart & [Ô]-[Ô] & QuartaPart
.Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE Desenho like [ô]%[Ô] & Result & [Ô]%[ô] ORDER BY LM_2[Ô]
o que você precisa ?
pq vc não da um replace e remove toda a pontuação para comparar?
Hugo, se vc observar tem um outro tópico já encerrado com o mesmo nome que explica o porque não uso o replace. Já tentei varias alternativas citadas pelos colegas do forum nesse tópico usando o replace, porem o mesmo não funciona devido versão do banco access, creio eu. Acredito que uma função possa resolver meu caso, as linhas de codigo abaixo esta + ou - funcionado, consegui fazer a formatação para dois tipos de entrada no TextBusca, ou seja, 0679023481 e 01782821 com 10 e 8 caracteres formatando para:
0679-02-348-1 e 0178-2-82-1.
Dim PrimeiraPart As String
Dim SegundaPart As String
Dim Data As String
Dim Result As String
Dim strSQL As String
Data = TxtBusca.text
If Len(TxtBusca.text) = 10 Then
PrimeiraPart = Mid$(Data, 1, 4)
SegundaPart = Mid$(Data, 5, 2)
TerceiraPart = Mid$(Data, 7, 3)
QuartaPart = Mid$(Data, 10, 1)
End If
Result = PrimeiraPart & [Ô]-[Ô] & SegundaPart & [Ô]-[Ô] & TerceiraPart & [Ô]-[Ô] & QuartaPart
.Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE Desenho like [ô]%[Ô] & Result & [Ô]%[ô] ORDER BY LM_2[Ô]
0679-02-348-1 e 0178-2-82-1.
Dim PrimeiraPart As String
Dim SegundaPart As String
Dim Data As String
Dim Result As String
Dim strSQL As String
Data = TxtBusca.text
If Len(TxtBusca.text) = 10 Then
PrimeiraPart = Mid$(Data, 1, 4)
SegundaPart = Mid$(Data, 5, 2)
TerceiraPart = Mid$(Data, 7, 3)
QuartaPart = Mid$(Data, 10, 1)
End If
Result = PrimeiraPart & [Ô]-[Ô] & SegundaPart & [Ô]-[Ô] & TerceiraPart & [Ô]-[Ô] & QuartaPart
.Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE Desenho like [ô]%[Ô] & Result & [Ô]%[ô] ORDER BY LM_2[Ô]
Dim Dado As String
Dim DadoSemFormato As String
Dim strSQL As String
Dado = trim(TxtBusca.text)
If Len(Dado) = 8 Then
Dado = format(Dado, [Ô]0000\-0\-00\-0[Ô])
elseif Len(Dado) = 10 then
Data = format(Dado, [Ô]0000\-00\-000\-0[Ô])
End If
DadoSemFormato = replace(Dado, [Ô]-[Ô], [Ô][Ô])
if Len(Dado) = 11 or Len(Dado) = 13
Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE Desenho = [ô][Ô] & Dado & [Ô][ô] OR Desenho = [ô][Ô] & DadoSemFormato & [Ô][ô] ORDER BY LM_2[Ô]
End If
Matou a pau RCMRO!!! Era isso mesmo que eu pretendia. Com isso acho que resolve praticamente tudo.
Valeu mesmo! Obrigado.
Valeu mesmo! Obrigado.
Só uma dúvida para encerrar nessa linha do seu codigo:
elseif Len(Dado) = 10 then
Data = format(Dado, [Ô]0000\-00\-000\-0[Ô])
End If
vai buscar no banco = 0679-02-348-1 blz
agora se tiver assim:
0476-1-251-2A com o mesmo 10 caracteres de contagem só que mudando a ordem no final para dois digitos e no meio para um.
pode acontecer esse caso, é raro mas......
elseif Len(Dado) = 10 then
Data = format(Dado, [Ô]0000\-00\-000\-0[Ô])
End If
vai buscar no banco = 0679-02-348-1 blz
agora se tiver assim:
0476-1-251-2A com o mesmo 10 caracteres de contagem só que mudando a ordem no final para dois digitos e no meio para um.
pode acontecer esse caso, é raro mas......
Uma vez que pode conter letras, troque os [Ô]0[Ô] (ZEROS) por @ (arroba) e acrecente mais uma variável...
Dim Dado1 As String
Dim Dado2 As String
Dim DadoSemFormato As String
Dim strSQL As String
Dado1 = trim(TxtBusca.text)
Dado2= [Ô][Ô]
If Len(Dado1) = 8 Then
Dado = format(Dado, [Ô]@@@@\-@\-@@\-@[Ô])
elseif Len(Dado1) = 10 then
Dado2 = format(Dado, [Ô]@@@@\-@\-@@@\-@@[Ô])
Dado1 = format(Dado, [Ô]@@@@\-@@\-@@@\-@[Ô])
End If
DadoSemFormato = replace(Dado, [Ô]-[Ô], [Ô][Ô])
if Len(Dado) = 11 or Len(Dado) = 13
Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE Desenho = [ô][Ô] & Dado & [Ô][ô] OR Desenho = [ô][Ô] & DadoSemFormato
If Dado2 <> [Ô][Ô] Then
Source = Source & [Ô][ô] OR Desenho = [ô][Ô] & Dado2
End If
Source = Source & [Ô][ô] ORDER BY LM_2[Ô]
End If
RCMRO, sei que já estou incomodando, mas como minha lógica de programação não é das melhores, vai mais uma:
Dim x(2) As String
x(0) = [Ô]0000\-00\-000\-0[Ô]
x(1) = [Ô]0000\.00\.000\.0[Ô]
Dado = Trim(TxtBusca.text)
If Len(Dado) = 8 Then
Dado = Format(Dado, [Ô]0000\-0\-00\-0[Ô])
ElseIf Len(Dado) = 10 Then
Dim i As Integer
If Dado <> [Ô][Ô] Then
For i = 0 To UBound(x) - 1
If Mid(x, 1) = [Ô].[Ô] Then
Dado = Format(Dado, x(i))
End If
Next
End If
End If
DadoSemFormato = Replace(Dado, [Ô]-[Ô], [Ô][Ô])
If Len(Dado) = 11 Or Len(Dado) = 13 Then
.Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE Desenho = [ô][Ô] & Dado & [Ô][ô] OR Desenho = [ô][Ô] & DadoSemFormato & [Ô][ô] ORDER BY LM_2[Ô]
End If
Como pode ver acima na formatação, pode existir duas formas, com (-) e (.). Tentei asuar um array mas so carrega com (-), já quebrei a cabeça para fazer a comparação e carregar corretamente, ou seja:
se no campo esta como 0679-02-348-1 vai usar x(0) = [Ô]0000\-00\-000\-0[Ô]
se no campo esta como 0679.02.348.1 vai usar x(0) = [Ô]0000\.00\.000\.0[Ô]
tem alguma ideia?
Dim x(2) As String
x(0) = [Ô]0000\-00\-000\-0[Ô]
x(1) = [Ô]0000\.00\.000\.0[Ô]
Dado = Trim(TxtBusca.text)
If Len(Dado) = 8 Then
Dado = Format(Dado, [Ô]0000\-0\-00\-0[Ô])
ElseIf Len(Dado) = 10 Then
Dim i As Integer
If Dado <> [Ô][Ô] Then
For i = 0 To UBound(x) - 1
If Mid(x, 1) = [Ô].[Ô] Then
Dado = Format(Dado, x(i))
End If
Next
End If
End If
DadoSemFormato = Replace(Dado, [Ô]-[Ô], [Ô][Ô])
If Len(Dado) = 11 Or Len(Dado) = 13 Then
.Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE Desenho = [ô][Ô] & Dado & [Ô][ô] OR Desenho = [ô][Ô] & DadoSemFormato & [Ô][ô] ORDER BY LM_2[Ô]
End If
Como pode ver acima na formatação, pode existir duas formas, com (-) e (.). Tentei asuar um array mas so carrega com (-), já quebrei a cabeça para fazer a comparação e carregar corretamente, ou seja:
se no campo esta como 0679-02-348-1 vai usar x(0) = [Ô]0000\-00\-000\-0[Ô]
se no campo esta como 0679.02.348.1 vai usar x(0) = [Ô]0000\.00\.000\.0[Ô]
tem alguma ideia?
Pronto...
Daqui para a frente vai ter que queimar uns neurônios para evoluir mas, acho que ficou genérica. Não testei mas dá para entender e corrigir alguma coisa pontual.
Lembro, contudo, que por questões de performance, você NECESSÀRIAMENTE precisará criar um indice no campo [Ô]Desenho[Ô], caso a tabela tenda a ser volumosa.
Daqui para a frente vai ter que queimar uns neurônios para evoluir mas, acho que ficou genérica. Não testei mas dá para entender e corrigir alguma coisa pontual.
Lembro, contudo, que por questões de performance, você NECESSÀRIAMENTE precisará criar um indice no campo [Ô]Desenho[Ô], caso a tabela tenda a ser volumosa.
Dim Dado As String
Dim Formato10(4) As String
Dim Formato8(4) As String
Dim DadoFormatado(4) As String
Dim DadoSemFormato As String
Dim Source As String
Dim i As Integer
Formato8(0) = [Ô]@@@@\-@\-@@\-@[Ô]
Formato8(1) = [Ô]@@@@\.@\.@@\.@[Ô]
Formato10(0) = [Ô]@@@@\-@\-@@@\-@@[Ô]
Formato10(1) = [Ô][Ô]@@@@\-@@\-@@@\-@[Ô][Ô]
Formato10(2) = [Ô]@@@@\.@\.@@@\.@@[Ô]
Formato10(3) = [Ô][Ô]@@@@\.@@\.@@@\.@[Ô][Ô]
Dado = trim(TxtBusca.text)
If Len(Dado) = 8 Then
For i = 0 to UBound(Formato10) - 1
If Formato8(i) <> [Ô][Ô] Then
DadoFormatado(i) = format(Dado, Formato8(i))
End If
Next
Elseif Len(Dado1) = 10 then
For i = 0 to UBound(Formato10) - 1
If Formato10(i) <> [Ô][Ô] Then
DadoFormatado(i) = Format(Dado, Formato10(i))
End If
Next
End If
DadoSemFormato = Replace(Replace(Dado, [Ô]-[Ô], [Ô][Ô]), [Ô].[Ô],[Ô][Ô])
if Len(Dado) = 11 or Len(Dado) = 13
Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE Desenho = [ô][Ô] & DadoSemFormato & [Ô][ô][Ô]
For i = 0 to UBound(DadoFormatado) - 1
If DadoFormatado(i) <> [Ô][Ô] Then
Source = Source & [Ô] OR Desenho = [ô][Ô] & DadoFormatado(i) & [Ô][ô][Ô]
End If
Next
Source = Source & [Ô] ORDER BY LM_2[Ô]
End If
RCMRO, lamento fiz os testes e não esta dando, veja bem.
No campo esta assim: 0679-02-348-1
se digito: 0679023481 cai aqui:
MsgBox [Ô]Lista de Material não cadastrada ou já liberada![Ô], vbCritical, [Ô]Erro de pesquisa[Ô]
Fiz o Debug.Print e a formatação esta posicionando aqui: Formato10(0) = [Ô]@@@@\-@\-@@@\-@@[Ô]
A varialvel DadoFormatado esta assumindo a formatação, Formato10(0) = [Ô]@@@@\-@\-@@@\-@@[Ô] ou seja o Laço só esta pegando o primeiro.
Acho que vou deixar isso pra lá.
No campo esta assim: 0679-02-348-1
se digito: 0679023481 cai aqui:
MsgBox [Ô]Lista de Material não cadastrada ou já liberada![Ô], vbCritical, [Ô]Erro de pesquisa[Ô]
Fiz o Debug.Print e a formatação esta posicionando aqui: Formato10(0) = [Ô]@@@@\-@\-@@@\-@@[Ô]
A varialvel DadoFormatado esta assumindo a formatação, Formato10(0) = [Ô]@@@@\-@\-@@@\-@@[Ô] ou seja o Laço só esta pegando o primeiro.
Acho que vou deixar isso pra lá.
Tópico encerrado , respostas não são mais permitidas