BUSCA DINAMICA 02
Vou dar uma dica pra você resolver seu problema. é uma solução pesada e demorada caso seu banco de Dados seja muioto grande, e se esta tabela contiver muito registros. Faça assim:
Faça uma consulta geral, na tabela, depois com com um Do Until EOF = True faça uma analise registro a registro, comparando o valor campo com LEN, tipo assim:
IF LEN(CAMPO)=13 THEN
tira so pontos e traços
faz a comparação
ELSEIF LEN(CAMPO)=10
compra direto
END IF
Entendeu???
Agora para você matar este assunto, e não ter mais problemas com isso faça um tratamento na inclusão dos dados retirando toda a formação existente e salvando no BD, e para mostrar os dados nos Forms você refaz a formatação, ok????
Na dúvida poste novamente.
Veja se está na (1) ou na (2) ou até na (3) as demais opções. Já mudei para ARRAY para poder conter TODAS as opções...
O que eu disse acima é mais ou menos assim:
Você trava o txtbuscar para que a entrada seja so números, sem formatação e faz a consulta abaixo. Mas foi como eu falei, se a tabela possuir poucos registros tudo bem, mais se houver muitos a pesquisa vai ser lenta e demorada. Mais tenta ai, ok????
Dim rsTemp As Recordset
Dim sCont As Integer [ô]Contador de caracter
Dim tCont As Integer [ô]Armazena o total de caracter na entrada
Dim sText As String [ô]Armazena o texto de entrada
Dim rText As String [ô]Armazena o resultado do split
Set rsTemp = New ADODB.Recordset
    rsTemp.Open [Ô]SELECT * FROM DadosCab[Ô], ConexaoLM, adOpenKeyset, adLockPessimistic
    sCont = 1
    tCont = 0
    With rsTemp
        If .BOF = True And .EOF = True Then Exit Sub
        Do Until .EOF = True
            tCont = Len(!Desenho)
            If tCont = 13 Then
                Do Until sCont > tCont
                    rText = Mid$(!Desenho, sCont, 1)
                    If rText <> [Ô]-[Ô] Then
                        sText = sText & rText
                    End If
                    sCont = sCont + 1
                Loop
            End If
            If TxtBusca.Text = sText Then
                [ô]Rotina de Preencher o grid
            Else
                [ô]Menssagem de Erro
            End If
            
            .MoveNext
        Loop
    End With
Este código é so um exemplo para você saber do que estou falando ok???
Citação:IRENKO escreveu:
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[Ô]
Respondendo esta pergunta sua segue:
 
Public Function Format_Nr_Desenho(sValor As String) As String
Dim sConta As Integer
Dim tTexto, rTexto As String
If Len(sValor) = 13 Then Format_Nr_Desenho = sValor: Exit Function
If Len(sValor) = 10 Then   [ô]Verifica se foi informado 10 caracteres numericos
    sConta = 1
    
    Do Until sConta > Len(sValor)
        tTexto = Mid$(sValor, sConta, 1)
        If sConta = 5 Or sConta = 7 Or sConta = 10 Then
            rTexto = rTexto & [Ô]-[Ô] & tTexto
        Else
            rTexto = rTexto & tTexto
        End If
        sConta = sConta + 1
    Loop
ElseIf Len(sValor) = 8 Then [ô]Verifica se foi informado 8 caracteres numericos
    sConta = 1
    
    Do Until sConta > Len(sValor)
        tTexto = Mid$(sValor, sConta, 1)
        If sConta = 5 Or sConta = 6 Or sConta = 8 Then
            rTexto = rTexto & [Ô]-[Ô] & tTexto
        Else
            rTexto = rTexto & tTexto
        End If
        sConta = sConta + 1
    Loop
Else  [ô]Se foi digitado caracter numérico que seja 8 ou 10 informa neste erro
    MsgBox [Ô]O número informado não corresponde ao padrão do sistema.[Ô] & vbNewLine & _
           [Ô]Você de deve informar 8 ou 10 números para a pesquisa seja[Ô] & vbNewLine & _
           [Ô]executada corretamente.[Ô], vbCritical, [Ô]Erro na Formatação[Ô]
        
End If
Format_Nr_Desenho = rTexto
End Function
                Citação: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á.
RCMRO, a sua sugestão é praticamente perfeita mas no laço for (For i = 0 To UBound(Formato10) - 1) para gravar na variavel (DadoFormatado) esta pegando sempre (Formato10(0) = [Ô]@@@@\-@\-@@@\-@@[Ô]), ou seja, não verefica os outros.
DANIKULL, vou testar sua sugestão tambem.
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(Dado) = 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) = 8 Or Len(Dado) = 10 Then
    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
                Manda aqui print dessa variável, logo depois de passar pela linha [Ô]Source = Source & [Ô] ORDER BY LM_2[Ô][Ô].
Aliás, deixa te perguntar: se está começando agora, porque já não aprende direto o VB.NET ou C# ao invez de VB6?
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(Dado) = 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 Then
.Source = [Ô]SELECT Desenho,LM_2 AS Lista FROM DadosCab WHERE Desenho = [ô][Ô] & Dado & [Ô][ô] OR Desenho = [ô][Ô] & DadoSemFormato & [Ô][ô][Ô]
Else
.Source = [Ô]SELECT Desenho, LM_2 AS Lista FROM DadosCab WHERE Desenho = [ô][Ô] & DadoFormatado(i) & [Ô][ô][Ô]
For i = 0 To UBound(DadoFormatado)
If DadoFormatado(i) <> [Ô][Ô] Then
.Source = .Source & [Ô] OR Desenho = [ô][Ô] & DadoFormatado(i) & [Ô][ô][Ô]
End If
Next
.Source = .Source & [Ô] ORDER BY LM_2[Ô]
End If
O select esta perfeito agora, só aconteceu um probleminha, o banco que te passei só tem um item que é o documento 6326 que aparece no Grid ao lado, no meu banco original quando faço a busca carrega no grid varios documentos e esse desenho informado para busca só existe no documento 6326, o que pode estar errado no select?
Quanto a sua pergunta, prefiro ficar no VB já estou velho demais para começar em outra linguagem, sendo que esta ainda tenho dificuldades, hehehe!!!