Usuário com melhor resposta
Consulta Sql entre DataInicial e DataFinal

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!!!
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
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!
-
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
-
-
-
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
-
-
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
-
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
-
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
- 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
-
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
-
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
-