Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nereu1301

[Resolvido] Filtros

Recommended Posts

Boa noite

 

Como sempre, depois de muito investigar na net e não encontrar, peço ajuda.

 

Faço meus relatórios com DataReport sem Data Environment e ficam muito bons, mas estou encontrando problema pra filtrar por exemplo:

 

Filtrar dados entre data inicial e data final e de

funcionários X do periodo data inicial-data final

 

nas subs abaixo, que estão funcionando bem, só consigo filtrar uma data e só consigo filtrar por funcionário.

[u]Private Sub cmdData_Click() 'filtra por data[/u]
On Erro GoTo trataerro

    If TxtDataInicial.Text <> "" Then
        consulta2 ("select * from Cons_Comissoes where data LIKE '" & TxtDataInicial & "' order by Nome")
        Call RelatVendServ
    Else
        MsgBox "Informe uma Data válida", vbInformation
        TxtDataInicial.SetFocus
    End If
    Exit Sub
trataerro:
    TxtDataInicial = ""
End Sub


[u]Private Sub cmdFunc_Click() 'filtra por funcionário[/u]
On Erro GoTo trataerro

    If txtFunc.Text <> "" Then
        consulta2 ("select * from Cons_Comissoes where Nome LIKE '" & txtFunc & "' order by Data")
        Call RelatVendServ
    Else
        MsgBox "Informe um nome de Cliente", vbInformation
        txtFunc.SetFocus
    End If
    Exit Sub
trataerro:
    txtFunc = ""
End Sub

Se alguem puder dar alguma idéia, agradeço.
Nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Nereu, você deve montar seus filtros nas próprias querys mesmo. Para selecionar intervalo de datas, utilize between e para seleciona intervalo de datas e funcionário junto use and.

 

Por exemplo:

select * from entradas where codfunc = 1 and (dataentrada between '2010-01-02' and '2010-01-30')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Claudio

 

mas o seguinte: eu quero que o periodo entre datas seja escolhido pelo usuário, que pode ser qualquer periodo.

 

ai tentei usar teu exemplo trocando as datas por txtdataInicial e txtdataFinal que são os textbox que uso, mas deu erro de critério.

 

Nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente o erro foi por conta do formato da data que está passando e o formato que seu banco está esperando.

 

O formato varia de banco pra banco ou ainda de configuração para configuração de cada banco.

 

Mas tente passar nesse formato e veja se vai:

 

yyyy-mm-dd hh:mm:ss

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas Claudio, não pode ser o formato da data porque quando filtro com uma data, tipo txtDataInicial ou txtdataFinal separadamente, e não de um periodo entre datas, o filtro funciona.

 

entendo que se o problema fosse o formato não filtraria nem usando uma só data.

 

mas de qualquer forma fiz o teste com sua ideia e continuou retorno mesmo erro.

 

Nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nereu, faz o seguinte, posta aqui como ficou sua consulta. Não no código, mas ela pronta da forma que está indo pro banco de dados.

 

Por exemplo, se seu código está assim:

strSQL = "select * from dados where data between '" & text1 & "' and '" & text2 & "'"
rs.open strSQL, cn

Coloque um debug.print logo após atribuir valor pra variável strSQL e execute usando f8. Irá aparecer sua string pronta na parte de baixo do VB. Copie e cole aqui pra vermos.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

meu camarada Claudio

 

sou meio freado em algumas coisas e acredite, não consegui fazer o procedimento que voce me indicou, mas voce tem razão,

o problema está no formato da data

 

eu tinha no banco Access formato data/hora e alterei para texto e ai começou funcionar, porem

 

ele encontra os dados referente ao funcionário X quando a data inicial é igual a data final senão ele mostra todos os dados do funcionário X

 

Por exemplo:

Funcionário DataInicial Data Final

Nereu 19/2/2010 19/2/2010 retorna certos os dados desse dia

 

Nereu 19/2/2010 26/2/2010 retorna todos os dados do funcionário e não do periodo

 

 

não sei se me expliquei bem, mas fico no aguardo

 

 

Nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso porque o campo está como texto, e não mais como data.

 

Quando está como data ele entende que deve pegar as datas dentro do seu intervalo, mas quando é texto, ele não sabe disso.

 

Mas também não sei te dizer que critérios ele usa para montar esse intervalo e pegar tudo.

 

Precisa deixar como data mesmo. Se está usando o access, tente passar a data no formato que mencionei anteriormente e veja se dá certo.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde

 

Alguem poderia, por favor, me informar porque essa sub retorna certo

Private Sub cmdData_Click() 'filtra por data

    If TxtDataInicial.Text <> "" Then
        Call Preenche_dgVendServ
        rsComissoes.Open ("select * from Cons_Comissoes where Data LIKE '" & TxtDataInicial.Text & "' order by Nome")
        Call RelatVendServ
    Else
        MsgBox "Informe uma Data válida", vbInformation
        TxtDataInicial.SetFocus
    End If
    Exit Sub
    TxtDataInicial = ""
End Sub
e essa da erro "Tipos de dados imcompativel na expressao do critério"

Private Sub cmdData_Click() 'filtra por data

    If TxtDataInicial.Text <> "" And TxtDataFinal.Text <> "" Then
        Call Preenche_dgVendServ
        rsComissoes.Open ("select * from Cons_Comissoes where Data between '" & TxtDataInicial.Text & "' and '" & TxtDataFinal.Text & "' order by Nome")
        Call RelatVendServ
    Else
        MsgBox "Informe uma Data válida", vbInformation
        TxtDataInicial.SetFocus
    End If
    Exit Sub
    TxtDataInicial = ""
End Sub
se as duas buscam os dados na mesma tabela e na mesma coluna de um banco access

porque já tentei de diversas formas, inclusive alterando o formato conforme o Claudio informou, e não consigo o retorno que quero.

 

Nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nereu, não tenho access aqui para testar, mas tenho quase certeza de que data em access deve ser passada entre ## e não entre ''. No primeiro caso só está dando certo porque está usando like.

 

Tente assim:

"select * from Cons_Comissoes where Data between #" & TxtDataInicial.Text & "# and #" & TxtDataFinal.Text & "# order by Nome"

Isso é assim mesmo, vareia de bd pra bd.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu camarada Claudio Neto

 

Muito obrigado, matou a charada.

 

Mas por favor me explique a diferença entre ' e # nessa situação. Essa foi a primeira vez que usei dessa forma.

 

Depois, por favor, pode colocar como resolvido.

 

Valeu!!!

 

Nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, não sei porque quando usou o like ele aceitou o '. Talvez tenha auto-convertido para string, sei lá. Mas pode ver que se tirar o like e usar = também dará erro usando '.

 

Como eu disse, varia de bd pra bd. Dos bd que conheço, só o access usa #.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.