Vídeo recomendado
https://youtu.be/diWPPPhW-9E

AJUDA! Filtro buscando valor de textbox em 3 colunas diferentes por ClausulaWere

Esclarecimentos e dúvidas sob o Modelo de Aplicativo de Cadastro em VBA no Microsoft Excel publicado no site e blog http://www.tomasvasquez.com.br
BXIMENES
Colaborador
Colaborador
Mensagens: 13
Registrado em: Dom Mai 28, 2017 5:29 pm
Localização: Sorocaba - SP

AJUDA! Filtro buscando valor de textbox em 3 colunas diferentes por ClausulaWere

Mensagem por BXIMENES »

Galera bom dia, boa tarde e boa noite!!!

Ajuda com FILTRO
1 - Tenho 3 colunas no BD para cada item=> Nome/ R.E/ C.C, onde por sua vez, poderá entrar os mesmos dados em qualquer uma dessas 3 colunas. Preciso acertar o código para que eu consiga filtrar R.E e C.C, mas que busque o valor da txtbox nas 3 colunas respectivas.
Segue exemplo do banco de dados:

[DATA] | [NOME1] | [RE1] | [C.C1] | [NOME2] | [RE.2] | [C.C2] | [NOME3] | [RE3] | [C.C3]
20/06 | BRUNO__|146__|78113__|________|______|_______|________|______|______
23/06 |________|______|_______|________|______|_______|BRUNO__|146___|78113
23/06 |________|______|_______|BRUNO__|146___|78113__|________|______|______

Os dados imputados no formulário de cadastro pode ser armazenado em uma das 3 colunas para cada item, e na hora da pesquisa eu terei uma textbox para procurar por RE e outra por CC, dai o valor digitado na textbox ao filtrar, ele busque nas 3 colunas e me retorne as linhas onde apareça os valores solicitados.

Precisava mudar a ClausulaWhere para que ela consiga pesquisar em mais de uma coluna ao mesmo tempo.

Código: Selecionar todos

'CLAUSULA PARA PESQUISAR AS COLUNAS DE C.C E R.E
Private Sub MontaClausulaWhere1(ByVal NomeControle As String, ByVal A As String, ByVal B As String, ByVal C As String, ByRef sqlWhere As String)

    If Trim(Me.Controls(NomeControle).Text) <> vbNullString Then
        If sqlWhere <> vbNullString Then
            sqlWhere = sqlWhere & " AND"
        End If
   
        Else
           sqlWhere = sqlWhere & " UCASE(" & CC1 Or CC2 Or CC3 & ") LIKE UCASE('%" & Trim(Me.Controls(NomeControle).Text) & "%')"
        End If
    
End Sub
Obrigado a todos!
Anexos
ModeloCadastro_Dados.zip
(79.06 KiB) Baixado 400 vezes
Editado pela última vez por BXIMENES em Sex Jun 23, 2017 3:24 pm, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: AJUDA! Filtro buscando mesmo dado em 3 colunas diferentes, problema com Data não sendo armazenada no BD, etc..

Mensagem por webmaster »

Problema com DATA: Use a função Format

Ajuda com FILTRO: Tem uma penca de exemplos aqui no fórum. Se estiver enfrentando problemas com filtros entre dados no SQL, procure pela cláusula BETWEEN

CARREGAR TXTBOX AUTOMATICAMENTE: Use o evento onClick para disparar seu código quando o OptionButton for clicado

Att


BXIMENES
Colaborador
Colaborador
Mensagens: 13
Registrado em: Dom Mai 28, 2017 5:29 pm
Localização: Sorocaba - SP

Re: AJUDA! Filtro buscando mesmo dado em 3 colunas diferentes, problema com Data não sendo armazenada no BD, etc..

Mensagem por BXIMENES »

webmaster escreveu: Dom Jun 04, 2017 11:46 pm Problema com DATA: Use a função Format

Ajuda com FILTRO: Tem uma penca de exemplos aqui no fórum. Se estiver enfrentando problemas com filtros entre dados no SQL, procure pela cláusula BETWEEN

CARREGAR TXTBOX AUTOMATICAMENTE: Use o evento onClick para disparar seu código quando o OptionButton for clicado

Att
Sobre a Data, coloquei CDate e deixei a txtbox habilitada, pois tinha deixado desabilitada e desta forma não estava transferindo o valor pro BD.

Sobre o filtro, estou tendo dificuldades em entender onde colocar o between, seria na MontaClausulaWhere que eu coloco ele? não estou conseguindo!

Sobre o onclick poderia deixar aqui um pequeno exemplo de como utilizar ele?
Parte do meu código para somar:

'VALORES DOS OPBUTTON GRUPO YOKOTEN
If OBYokt1.Value = True Then
valorYokt = 1
End If
If OBYokt3.Value = True Then
valorYokt = 3
End If
If OBYokt5.Value = True Then
valorYokt = 5
End If
soma = valorSeg + valorAmb + valorQual + valorProd + valorCust + valorInov + valorEsf + valorYokt
txtPontuacao.Value = soma
Call CarregaClassificacao

Me desculpe, mas ainda estou me desenvolvendo em VBA. Então tenho muitas duvidas ainda!


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: AJUDA! Filtro buscando mesmo dado em 3 colunas diferentes, problema com Data não sendo armazenada no BD, etc..

Mensagem por webmaster »

Se der um duplo clique no OptionButton, o evento Click sera gerado automaticamente. Eh nele que voce pode aplicar a manipulacao que comentei.

Sobre o filtro: viewtopic.php?f=5&t=375&p=2824&hilit=wh ... ween#p2824


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


BXIMENES
Colaborador
Colaborador
Mensagens: 13
Registrado em: Dom Mai 28, 2017 5:29 pm
Localização: Sorocaba - SP

Re: AJUDA! Filtro buscando mesmo dado em 3 colunas diferentes, problema com Data não sendo armazenada no BD, etc..

Mensagem por BXIMENES »

webmaster escreveu: Ter Jun 06, 2017 12:39 pm Se der um duplo clique no OptionButton, o evento Click sera gerado automaticamente. Eh nele que voce pode aplicar a manipulacao que comentei.

Sobre o filtro: viewtopic.php?f=5&t=375&p=2824&hilit=wh ... ween#p2824
Ok Tomas, vou verificar quanto a isso.
Sobre o filtro entre datas eu consegui fazer seguindo um fórum aqui que o amigo Mauro Coutinho postou.
viewtopic.php?f=5&t=375&hilit=between&start=10


O problema com a data eu modifiquei aqui e vou verificar se esta normal agora, percebi que para a data ir para o banco de dados, eu teria que deixar ativado o txtbox, a data do sistema eh carregada, porem o usuário pode muda-la pois não esta bloqueado a txtbox.

Agora estou tentando entender a clausulawhere para conseguir fazer a busca de determinado dado em 3 colunas, ainda estou quebrando a cabeça....
Como existe 3 campos para colocar nome, RE e CC, na hora do filtro, preciso que ele busque por exemplo o RE 146 nas 3 colunas de RE existentes no banco.
Se puder dar uma luz para mim quanto a isso, ficarei muito agradecido!


Tenham todos uma ótima semana!


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: AJUDA! Filtro buscando mesmo dado em 3 colunas diferentes, problema com Data não sendo armazenada no BD, etc..

Mensagem por webmaster »

A clausula WHERE funciona da seguinte forma:

Código: Selecionar todos

SELECT Nome, SobreNome, Idade, Sexo
FROM Tabela
WHERE Nome = 'BXIMENES'
Voce pode ter mais de uma condicao na clausula WHERE unindo-as pelo operador logico AND (E logico) ou OR (OU logico). Entao, se voce quiser fazer mais de um teste no mesmo campo, use o OR nele mais de uma vez:

Código: Selecionar todos

SELECT Nome, SobreNome, Idade, Sexo
FROM Tabela
WHERE Nome = 'BXIMENES' OR SobreNome = 'BXIMENES' 
Assim como na matematica, vale usar parenteses para ordenar o que sera avaliado primeiro.

Att


BXIMENES
Colaborador
Colaborador
Mensagens: 13
Registrado em: Dom Mai 28, 2017 5:29 pm
Localização: Sorocaba - SP

Re: AJUDA! Filtro buscando mesmo dado em 3 colunas diferentes, problema com Data não sendo armazenada no BD, etc..

Mensagem por BXIMENES »

webmaster escreveu: Ter Jun 06, 2017 5:32 pm A clausula WHERE funciona da seguinte forma:

Código: Selecionar todos

SELECT Nome, SobreNome, Idade, Sexo
FROM Tabela
WHERE Nome = 'BXIMENES'
Voce pode ter mais de uma condicao na clausula WHERE unindo-as pelo operador logico AND (E logico) ou OR (OU logico). Entao, se voce quiser fazer mais de um teste no mesmo campo, use o OR nele mais de uma vez:

Código: Selecionar todos

SELECT Nome, SobreNome, Idade, Sexo
FROM Tabela
WHERE Nome = 'BXIMENES' OR SobreNome = 'BXIMENES' 
Assim como na matematica, vale usar parenteses para ordenar o que sera avaliado primeiro.

Att

Tomas bom dia!
Fiz da seguinte forma, mas não deu certo.

Na Funciton PreecheRecordSet fiz assim:

Código: Selecionar todos

Call MontaClausulaWhere1(txtCC1.Name, "CC1", "CC2", "CC3", sqlWhere)
E fiz uma clausulawhere separada:

Código: Selecionar todos

'CLAUSULA PARA PESQUISAR AS COLUNAS DE C.C E R.E
Private Sub MontaClausulaWhere1(ByVal NomeControle As String, ByVal CC1 As String, ByVal CC2 As String, ByVal CC3 As String, ByRef sqlWhere As String)

    If Trim(Me.Controls(CC1).Text) Or (Me.Controls(CC2).Text) Or (Me.Controls(CC3).Text) <> vbNullString Then
        If sqlWhere <> vbNullString Then
            sqlWhere = sqlWhere & " AND"
        End If
   
        Else
           sqlWhere = sqlWhere & " UCASE(" & CC1 & ") OR (" & CC2 & ") OR (" & CC3 & ") LIKE UCASE('%" & Trim(Me.Controls(NomeControle).Text) & "%')"
        End If
Deu o erro de variável with não definida e não carrega o listview.

O que fiz de errado será?

Desde já muito obrigado!


BXIMENES
Colaborador
Colaborador
Mensagens: 13
Registrado em: Dom Mai 28, 2017 5:29 pm
Localização: Sorocaba - SP

Re: AJUDA! Filtro buscando mesmo dado em 3 colunas diferentes, problema com Data não sendo armazenada no BD, etc..

Mensagem por BXIMENES »

webmaster escreveu: Sex Jun 09, 2017 1:56 pm Qual e o sql final?
É o mesmo projeto que você fez, não mudei o nome da planilha onde armazena. ModeloCadastro_Dados


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: AJUDA! Filtro buscando mesmo dado em 3 colunas diferentes, problema com Data não sendo armazenada no BD, etc..

Mensagem por webmaster »

Por isso mesmo estou perguntando: qual o sql final?

Antes de preencher o recordset, faça um

Código: Selecionar todos

Debug.Print sql
E poste aqui o que aparecer na janela de verificação imediata


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder