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

MontaClausulaWhere usando DATAS ?

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
fabricio_sp30
Colaborador
Colaborador
Mensagens: 90
Registrado em: Ter Ago 03, 2010 9:40 pm

Re: MontaClausulaWhere usando DATAS ?

Mensagem por fabricio_sp30 »

Calizmo escreveu:Caros Tomas e Mauro,

Fiz algumas adpatações no projeto Cadastro (utilizo o v2), pois tbém tenho necessidade de pesquisar a base de dados (planilha de movimentos CtasPagar) por data.
E como precisava buscar os dados por intervalo, utilizei uma variante da rotina, porém, colocando no bloco SQL : campoData >= #data_inicial# e campoData <= #data_inicial# , que funcionou corretamente.

Sds,
Cássio Motta

ps. o código não ficou aquela "belesura" mas antende ;) (sou iniciante em VBA).

E Parabéns ! pela seriedade com que os assuntos são abordados/tratados.

Cássio Motta
Cassio,
voce usou a clausula where


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
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: MontaClausulaWhere usando DATAS ?

Mensagem por Mauro Coutinho »

fabricio, isso é uma pergunta ? Voce quer dizer a rotina MontaClausulaWhere do form Pesquisa ?
Cassio,
voce usou a clausula where
Se sim, segue a adaptação que fiz com rotina MontaClausulaWhere para se localizar entre Datas adicionando um CheckBox e um Case com a cláusula BETWEEN conforme dica do Tomas ficando assim :

Na Declaração coloquei :
Private LocEntreDatas As Long

No Botão Filtrar defini a variavel LocEntreDatas:

Código: Selecionar todos

Private Sub cmbFiltrar_Click()
    If chkEntreDatas.Value = True Then
        LocEntreDatas = 1
    Else
        LocEntreDatas = 0
    End If
    Call PopulaListBox(txtDtIniP.Text, txtDtFimP.Text, txtProtocP.Text, txtEndP.Text, txtSolicitP.Text, txtServP.Text, txtRgDisinP.Text, txtNRgDsP.Text)

End Sub
Criei um ChkBox :

Código: Selecionar todos

Private Sub chkEntreDatas_Click()
    If chkEntreDatas.Value = True Then
        cboOrdenarPor.Value = "DATA" 'Forçar classificação por Data
    Else
        cboOrdenarPor.Value = ""
    End If
End Sub
E na rotina coloquei um Case :

Código: Selecionar todos

Private Sub MontaClausulaWhere(ByVal NomeControle As String, ByVal NomeCampo As String, ByRef sqlWhere As String)

    If Trim(Me.Controls(NomeControle).Text) <> vbNullString Then
        If sqlWhere <> vbNullString Then
            sqlWhere = sqlWhere & " AND"
        End If
   
    If IsDate(Me.Controls(NomeControle).Text) Then 'Verifica se é Data
        Select Case LocEntreDatas
            Case 0 'Procura por uma unica Data
                sqlWhere = sqlWhere & " (" & NomeCampo & ") = #" & Format(txtDtIniP, "m/d/yyyy") & "#"
            Case 1 'Procura entre duas Datas
                sqlWhere = sqlWhere & " (" & NomeCampo & ") BETWEEN #" & Format(txtDtIniP, "mm/dd/yyyy") & "# AND #" & Format(txtDtFimP, "mm/dd/yyyy") & "#"
        End Select
            
        Else
           sqlWhere = sqlWhere & " UCASE(" & NomeCampo & ") LIKE UCASE('%" & Trim(Me.Controls(NomeControle).Text) & "%')"
        End If
        
    End If

End Sub
Nas rotinas abaixo alterei:
Na rotina PopulaListBox usei a chamada a Função RecordSet
Set rst = RecordSet(DataInicio, DataFim, Protocolo, Endereco, Solicitante, Servico, RegiaoDisin, NumRgDisin)

Na Function RecordSet acrescentei :
Call MontaClausulaWhere(txtDtIniP.Name, "DATA", sqlWhere)

Está meio grosseiro, falta um pouco mais de estudo em cima para melhorar, mas pelos meus conhecimentos em SQL acho que já melhorei bastante, e comecei a entender um pouco mais as Clausulas, nas adaptações estão com os nomes dos controles que estou usando, seria só o caso de adaptar de acordo com os seus.
Estou quase finalizando essas adaptações do Form Pesquisa para a finalidade que preciso, e assim que terminar coloco um exemplo aqui no Forun, veja se essas dicas ajudam, qq duvida poste novamente.

[]s


Ermesinde
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Dom Dez 19, 2010 4:27 pm

Re: MontaClausulaWhere usando DATAS ?

Mensagem por Ermesinde »

Boa tarde,

Sou iniciante em VBA. Estou adaptando o Modelo de Cadastro V2 para utilização. Necessitava no form pesquisa de efectuar pesquisa entre datas juntamente com os outrs critérios. Utilizei a cláusula BETWEEN mas não funcionou só aparece a data inicio e data fim ( e tem que corresponder a alguma data na folha de dados senão já não funciona). Seria possivel ajudar... disponibilizando um exemplo

Muito obrigado pela urgência.

Ermesinde


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

Re: MontaClausulaWhere usando DATAS ?

Mensagem por webmaster »

Ermesinde,

Os código já colocados pelo colega Mauro não são exatamente a resposta do seu problema?

Abraços


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.


Ermesinde
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Dom Dez 19, 2010 4:27 pm

Re: MontaClausulaWhere usando DATAS ?

Mensagem por Ermesinde »

Tomás,

Infelizmente, não consegui aplicar o código, por isso se conseguissem disponibilizar o ficheiro eu ficaria muito grato para poder estudar e compreender... estou iniciando em VBA.

Abraço


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

Re: MontaClausulaWhere usando DATAS ?

Mensagem por webmaster »

Ermesinde,

Neste caso, é mais simples você nos enviar seu arquivo para aplicarmos tais modificações, não acha?

Abraços


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: MontaClausulaWhere usando DATAS ?

Mensagem por Mauro Coutinho »

Reforçoa as palavras do Tomas, e acrescento que as rotinas acima foram efetudas utilizando o Modelo Cadastro V3, mas neste caso especifico seria só seguir o passo a passo que utilizei para poder utiliza-la na V2, outra observação é que quando lidamos com adaptações em qualquer uma das versões do Modelo cadastro devemos ficar atentos aos nomes dos controles.
De uma olhada no Tópico TUTORIAIS, que disponibilizei algumas dicas e arquivos sobre alterações e implementações nos Modelos.

[]s


Ermesinde
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Dom Dez 19, 2010 4:27 pm

Re: MontaClausulaWhere usando DATAS ?

Mensagem por Ermesinde »

Oi,
Anexo o ficheiro para por favor vocês me ajudarem. Aproveito também para pedir que vejam se conseguem somar automaticamente a coluna 10 "Tempo Gasto" pois penso que não faz a soma correctamente.

Agradeço muito a vossa ajuda e disponibilidade.

Obrigado
Anexos
ModeloPesquisa.zip
(86.32 KiB) Baixado 622 vezes


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

Re: MontaClausulaWhere usando DATAS ?

Mensagem por webmaster »

Ermesinde,

A rotina funciona perfeitamente. O problema é que os dados da coluna Data na sua planilha "não são datas". As datas estão guardadas como texto. Formatei a coluna, redigitei os dados e funcionou perfeitamente. Vai o arquivo anexo. A macros não sofreram mudança alguma.

Abraços
Anexos
ModeloPesquisa.zip
(36.14 KiB) Baixado 612 vezes


Ermesinde
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Dom Dez 19, 2010 4:27 pm

Re: MontaClausulaWhere usando DATAS ? (RESOLVIDO)

Mensagem por Ermesinde »

Tomás,

Muito obrigado pela ajuda... são pessoas como vocês que fazem a união...

Abraço


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