none
Consulta Sql entre DataInicial e DataFinal RRS feed

  • Pergunta

  • Boa Tarde Pessoal!!!

    Estou desenvolvendo um sistema em visual studio 2010, com banco de dados access.

    Todas as consultas que realizo no sistema e feita pelo construtor de consultas do visual studio, estou com dificuldades de criar esta consulta no construtor.

    Gostaria que fosse da seguinte forma, tenho um formulario com um datagrid e uma coluna chamada "Data", e nessa coluna que quero fazer a consulta entre a data incicial e a data final.

    Tenho no formulario 2 datetimerpiker, sendo um datainicial e outro data final, gostaria que quando eu selecionasse a data inicial e a data final e clicar no botão pesquisar, a pesquisa se realize.

    ja tentei fazer de varias formas mas não da certo pois a maioria das consultas encontradas no forum ou no google e feita por codigo e conecção do banco de dados e meu sistema e diferente, estou criando ele todo pelo visual mesmo, adianta muito na programação, enfim vai um exemplo que não retorna nada pois na consulta não esta aparecendo onde eu colocar a data inicial e a data final.

    SELECT        Data
    FROM           TbEstoque
    WHERE        (Data BETWEEN 'dtaincial' AND 'dtafinal') ' aqui nessa linha preciso colocar data inicial e data final escolhida quando for fazer a consulta.

    não assim como achei tambem nos foruns, exemplo:

    SELECT        Data
    FROM           TbEstoque
    WHERE        (Data BETWEEN '2017/01/01' AND '2017/04/01') ' não pode ser assim o usuario que vai escolher a data na hora da consulta entende.

    Pessoal desde já agradeço atenção de todos.

    Fico no aguardo, muito obrigado!!!

    sábado, 18 de fevereiro de 2017 15:11

Respostas

  • O termo deve ser "Marcar como Resposta". Você chegou a fazer isto, pelo que vi no histórico, mas desmarcou em seguida.
    • Marcado como Resposta Pablo_1977 segunda-feira, 20 de fevereiro de 2017 12:37
    segunda-feira, 20 de fevereiro de 2017 12:29

Todas as Respostas

  • Olá, Pablo! Se entendi o seu problema, basta você concatenar na string sql os valores selecionados em cada datetimerpicker:

    string sql = string.Format(@"SELECT        Data
    FROM           TbEstoque
    WHERE        (Data BETWEEN '{0}' AND '{1}')", dateTimerPickerInicial.Value, dateTimerPickerFinal.Value); 
    Talvez você tenha de formatar a data, dependendo do formato no banco de dados. Bom trabalho!

    sábado, 18 de fevereiro de 2017 15:36
  • Boa Tarde Rodrigo!!!

    Rodrigo muito obrigado pela atenção!!!

    Então como tinha falado, coloco esse codigo no construtor de consultas da erro, estou programando em vb.net desculpa esqueci de comentar esse detalhe, ou esse codigo coloco no click do botão, so que ai preciso de fazer uma conecção e isso???

    posso colocar uma foto do erro que gera quando coloco o codigo no construtor de consultas???

    desde já obrigado.


    PabloSousa

    sábado, 18 de fevereiro de 2017 15:54
  • Pode colocar a imagem sim. Você está utilizando tableAdapter para o acesso a dados?
    sábado, 18 de fevereiro de 2017 16:15
  • e isso mesmo,

    segue a imagem do erro,

    obrigado.


    PabloSousa

    sábado, 18 de fevereiro de 2017 16:17
  • Então escreva assim o sql:

    SELECT        Data
    FROM           TbEstoque
    WHERE        (Data BETWEEN @dataInicial AND @dataFinal)
    Desta forma o seu método Get do table adapter (por exemplo) irá adicionar a espera destes parâmetros. Então, quando chamar o método, apenas passe os parâmetros. Acho que isso resolve o teu problema, levando em consideração a maneira que você está trabalhando. Sugiro que você procure dar uma olhada nos artigos do Macoratti. O cara é um dinossauro da área e tem vários artigos de grande ajuda ;)



    • Editado Rodrigo CdS sábado, 18 de fevereiro de 2017 18:13
    sábado, 18 de fevereiro de 2017 18:13
  • Obrigado Rodrigo,

    Vou testar e logo dou resposta.

    muito obrigado.


    PabloSousa

    sábado, 18 de fevereiro de 2017 18:16
  • Rodrigo,

    infelizmente não deu certo, não funciona, deu uma olhada no forum do Macoratti, tem um exemplo lá mas e conexão sql tentei modificar aqui para oledb mas ta osso, não tenho muita pratica com conexão via codigo.

    como ficaria esse exemplo em oledb.

    Private Sub btnFiltrar_Click(sender As Object, e As EventArgs) Handles btnFiltrar.Click
            Dim dtinicio As String
            Dim dtfim As String
            Dim tabela As New DataTable
            Dim strsql As String
            dtinicio = dtpInicio.Value.ToString
            dtfim = dtpFim.Value.ToString
            strsql = "Select * from Funcionarios Where admissao between @dtInicio And @dtFim order by admissao"
            Dim con As New SqlConnection
            Dim cmd As New SqlCommand
            Try
                con.ConnectionString = "Data Source=(LocalDB)\v11.0;Initial Catalog=Cadastro;Integrated Security=True"
                con.Open()
                cmd.Connection = con
                cmd.Parameters.AddWithValue("@dtInicio", dtinicio)
                cmd.Parameters.AddWithValue("@dtFim", dtfim)
                cmd.CommandText = strsql
                Using reader As SqlDataReader = cmd.ExecuteReader()
                    tabela.Load(reader)
                    dgvFunci.DataSource = tabela
                End Using
            Catch ex As Exception
                MessageBox.Show("Erro : " & ex.Message, "Consultar Registros")
            Finally
                con.Close()
            End Try
        End Sub

    se puder dar uma força, agradeço.

    muito obrigado.

    


    PabloSousa

    sábado, 18 de fevereiro de 2017 21:35
  • Boa Noite Pessoal!!!

    Venho agradecer a todos que deram uma força, principalmente você rodrigo, consegui fazer funcionar o filtro entre datas.

    Peguei um pouco de cada e saiu esse código abaixo.

    Muito Obrigado, ate a proxima!!!

    Private Sub btnFiltrar_Click(sender As Object, e As EventArgs) Handles btnFiltrar.Click
    
            Dim dtinicio As String
            Dim dtfim As String
            Dim tabela As New DataTable
            Dim strsql As String
    
            dtinicio = dtpInicio.Value.ToString
            dtfim = dtpFim.Value.ToString
    
            strsql = "Select * from TbEstoque Where Data between @dtInicio And @dtFim order by Data"
    
            Dim con As New OleDbConnection
            Dim cmd As New OleDbCommand
            Try
                con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\PabloAdmin\Desktop\BdEstoque.accdb"
                con.Open()
                cmd.Connection = con
                cmd.Parameters.AddWithValue("@dtInicio", dtinicio)
                cmd.Parameters.AddWithValue("@dtFim", dtfim)
    
                cmd.CommandText = strsql
    
                Using reader As OleDbDataReader = cmd.ExecuteReader()
                    tabela.Load(reader)
                    dgvestoque.DataSource = tabela
                End Using
    
            Catch ex As Exception
                MessageBox.Show("Erro : " & ex.Message, "Consultar Registros")
            Finally
                con.Close()
            End Try
    
        End Sub

    Problema resolvido, pode carimba!!!

    Desistir nunca, persistir sempre.

    Toda Honra e Glória seja dada a ti Senhor!!! Muito Obrigado!!!


    PabloSousa

    • Sugerido como Resposta Rodrigo CdS segunda-feira, 20 de fevereiro de 2017 12:41
    domingo, 19 de fevereiro de 2017 01:13
  • Boa Noite Pessoal!!!

    Venho agradecer a todos que deram uma força, principalmente você rodrigo, consegui fazer funcionar o filtro entre datas.

    Peguei um pouco de cada e saiu esse código abaixo.

    Muito Obrigado, ate a proxima!!!

    Private Sub btnFiltrar_Click(sender As Object, e As EventArgs) Handles btnFiltrar.Click
    
            Dim dtinicio As String
            Dim dtfim As String
            Dim tabela As New DataTable
            Dim strsql As String
    
            dtinicio = dtpInicio.Value.ToString
            dtfim = dtpFim.Value.ToString
    
            strsql = "Select * from TbEstoque Where Data between @dtInicio And @dtFim order by Data"
    
            Dim con As New OleDbConnection
            Dim cmd As New OleDbCommand
            Try
                con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\PabloAdmin\Desktop\BdEstoque.accdb"
                con.Open()
                cmd.Connection = con
                cmd.Parameters.AddWithValue("@dtInicio", dtinicio)
                cmd.Parameters.AddWithValue("@dtFim", dtfim)
    
                cmd.CommandText = strsql
    
                Using reader As OleDbDataReader = cmd.ExecuteReader()
                    tabela.Load(reader)
                    dgvestoque.DataSource = tabela
                End Using
    
            Catch ex As Exception
                MessageBox.Show("Erro : " & ex.Message, "Consultar Registros")
            Finally
                con.Close()
            End Try
    
        End Sub

    Problema resolvido, pode carimba!!!

    Desistir nunca, persistir sempre.

    Toda Honra e Glória seja dada a ti Senhor!!! Muito Obrigado!!!


    PabloSousa

    Beleza, Pablo! Sugiro que você marque a sua resposta como solução, para que outras pessoas possam ser ajudadas também quando tiverem dúvida semelhante.
    • Marcado como Resposta Pablo_1977 segunda-feira, 20 de fevereiro de 2017 12:19
    • Não Marcado como Resposta Pablo_1977 segunda-feira, 20 de fevereiro de 2017 12:19
    segunda-feira, 20 de fevereiro de 2017 11:31
  • Bom Dia Rodrigo!!!

    Desculpe mas como faz para marcar como solução.

    Obrigado.


    PabloSousa

    • Sugerido como Resposta Rodrigo CdS segunda-feira, 20 de fevereiro de 2017 12:28
    • Não Sugerido como Resposta Rodrigo CdS segunda-feira, 20 de fevereiro de 2017 12:28
    segunda-feira, 20 de fevereiro de 2017 12:20
  • O termo deve ser "Marcar como Resposta". Você chegou a fazer isto, pelo que vi no histórico, mas desmarcou em seguida.
    • Marcado como Resposta Pablo_1977 segunda-feira, 20 de fevereiro de 2017 12:37
    segunda-feira, 20 de fevereiro de 2017 12:29
  • Ok rodrigo,

    Obrigado.


    PabloSousa

    segunda-feira, 20 de fevereiro de 2017 12:37