FILTRO POR DATAS
Boa noite pessoal
Sou novo aqui no forum, venho pedir uma ajuda de vocês, tenho a seguinte situação:
Sempre usei o excel para fazer meus controle usando VBA, agora eu mudei, baixei VB 2008, e até agora to me virando, cheguei em um ponto que preciso criar um filtro no datagridviw por criterio de nome e data inicial e data final, e click botão e faz o filtro trazendo o resultado no datagridview, alguem tem um exemplo para mim estudar como foi feito o respectivo filtro. O banco de dados é o Access 2010
Sou novo aqui no forum, venho pedir uma ajuda de vocês, tenho a seguinte situação:
Sempre usei o excel para fazer meus controle usando VBA, agora eu mudei, baixei VB 2008, e até agora to me virando, cheguei em um ponto que preciso criar um filtro no datagridviw por criterio de nome e data inicial e data final, e click botão e faz o filtro trazendo o resultado no datagridview, alguem tem um exemplo para mim estudar como foi feito o respectivo filtro. O banco de dados é o Access 2010
Primeiro, eu aconselho a entrar em sites de cursos grátis, pelo menos para começar a pegar a malÃcia do negócio (O pessoal consulta muito o site do Macoratti).
Mas pra começar, o que você tem que ter em mente é: como o dado está configurado no seu banco de dados?
Se está como tipo [Ô]Texto[Ô], você pode fazer uma pesquisa com o Like, por exemplo:
[Ô]SELECT * FROM tblVendas WHERE cData LIKE [ô]%/11/2013[ô] [Ô]
Acima eu busco, na coluna cData, tudo que contenha [Ô]/11/2013[Ô], ou seja 01/11/2013, 02/11/2013, etc.
Se seu campo for do tipo DataHora, aà fica mais complicado porque tem que saber como o BD trata este tipo de dado. O Access trata da seguinte maneira: mês/dia/ano, ou seja 11/23/2013 (23 de novembro de 2013).
Aà você terá de enviar para o Access a data entre [Ô]#[Ô], por exemplo:
[Ô]SELECT * FROM tblVendas WHERE cData = #11/5/2013#[Ô]
Acima: Selecione tudo da tabela tblVendas onde a coluna cData seja iqual a 05/11/2013.
Obs: Outro detalhe é que, tanto o mês quanto o dia, se forem menores que 10, não podem ter o zero na frente:
05 - Errado;
5 - Certo.
Boa sorte.
Mas pra começar, o que você tem que ter em mente é: como o dado está configurado no seu banco de dados?
Se está como tipo [Ô]Texto[Ô], você pode fazer uma pesquisa com o Like, por exemplo:
[Ô]SELECT * FROM tblVendas WHERE cData LIKE [ô]%/11/2013[ô] [Ô]
Acima eu busco, na coluna cData, tudo que contenha [Ô]/11/2013[Ô], ou seja 01/11/2013, 02/11/2013, etc.
Se seu campo for do tipo DataHora, aà fica mais complicado porque tem que saber como o BD trata este tipo de dado. O Access trata da seguinte maneira: mês/dia/ano, ou seja 11/23/2013 (23 de novembro de 2013).
Aà você terá de enviar para o Access a data entre [Ô]#[Ô], por exemplo:
[Ô]SELECT * FROM tblVendas WHERE cData = #11/5/2013#[Ô]
Acima: Selecione tudo da tabela tblVendas onde a coluna cData seja iqual a 05/11/2013.
Obs: Outro detalhe é que, tanto o mês quanto o dia, se forem menores que 10, não podem ter o zero na frente:
05 - Errado;
5 - Certo.
Boa sorte.
Então to na luta aqui, eu fiz um filtro aqui só que sem resultado, não sei onde estou errado.Segue ele para voces darem uma olhada
Imports System.Data.SqlClient
Public Class Form1
Dim provider As String
Dim dataFile As String
Dim connString As String
Dim myConnection As OleDb.OleDbConnection = New OleDb.OleDbConnection
Dim ds As DataSet = New DataSet
Dim da As OleDb.OleDbCommand
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
provider = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source =[Ô]
dataFile = [Ô]C:\Users\USER\Desktop\Banco1.accdb[Ô]
connString = provider & dataFile
myConnection.ConnectionString = connString
myConnection.Open()
[ô] Dim sql As String = [Ô]SELECT Codigo,nome,data FROM estagio WHERE data between data AND data[Ô]
Dim sql As String = [Ô]SELECT Codigo,nome,data FROM estagio WHERE data = #Textbox1# and #Textbox2#[Ô]
Dim table As New DataTable()
Using cmd As New SqlCommand(sql)
da.Parameters.AddWithValue([Ô]@data[Ô], TextBox1.Text)
da.Parameters.AddWithValue([Ô]@data[Ô], TextBox2.Text)
Using da As New SqlDataAdapter(cmd)
da.Fill(table)
DataGridView1.DataSource = table
End Using
End Using
End Sub
End Class
Imports System.Data.SqlClient
Public Class Form1
Dim provider As String
Dim dataFile As String
Dim connString As String
Dim myConnection As OleDb.OleDbConnection = New OleDb.OleDbConnection
Dim ds As DataSet = New DataSet
Dim da As OleDb.OleDbCommand
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
provider = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source =[Ô]
dataFile = [Ô]C:\Users\USER\Desktop\Banco1.accdb[Ô]
connString = provider & dataFile
myConnection.ConnectionString = connString
myConnection.Open()
[ô] Dim sql As String = [Ô]SELECT Codigo,nome,data FROM estagio WHERE data between data AND data[Ô]
Dim sql As String = [Ô]SELECT Codigo,nome,data FROM estagio WHERE data = #Textbox1# and #Textbox2#[Ô]
Dim table As New DataTable()
Using cmd As New SqlCommand(sql)
da.Parameters.AddWithValue([Ô]@data[Ô], TextBox1.Text)
da.Parameters.AddWithValue([Ô]@data[Ô], TextBox2.Text)
Using da As New SqlDataAdapter(cmd)
da.Fill(table)
DataGridView1.DataSource = table
End Using
End Using
End Sub
End Class
Faz assim:
Dim sql As String = [Ô]SELECT Codigo, nome, data FROM estagio WHERE data BETWEEN #[Ô] & Textbox1.Text & [Ô]# AND #[Ô] & Textbox2.Text & [Ô]#[Ô]
Dim sql As String = [Ô]SELECT Codigo, nome, data FROM estagio WHERE data BETWEEN #[Ô] & Textbox1.Text & [Ô]# AND #[Ô] & Textbox2.Text & [Ô]#[Ô]
Esqueci, nao vai funcionar, vc precisa alterar a data de dd/mm/yyyy para mm/dd/yyyy:
faz assim:
dim Dia1, Dia2, Mes1, Mes2, Ano1, Ano2, Data1, Data2 as String
TextBox1.SelectionStart = 0
TextBox1.SelectionLength = 2
Dia1 = TextBox1.SelectedText
TextBox1.SelectionStart = 3
TextBox1.SelectionLength = 2
Mes1 = TextBox1.SelectedText
TextBox1.SelectionStart = 6
TextBox1.SelectionLength = 2
Mes1 = TextBox1.SelectedText
[ô]Faz igual no TextBox2 utilizando as outras variaveis
Data1 = Mes1 & [Ô]/[Ô] & Dia1 & [Ô]/[Ô] & Ano1
Dim sql As String = [Ô]SELECT Codigo, nome, data FROM estagio WHERE data BETWEEN #[Ô] & Data1 & [Ô]# AND #[Ô] & Data2 & [Ô]#[Ô]
faz assim:
dim Dia1, Dia2, Mes1, Mes2, Ano1, Ano2, Data1, Data2 as String
TextBox1.SelectionStart = 0
TextBox1.SelectionLength = 2
Dia1 = TextBox1.SelectedText
TextBox1.SelectionStart = 3
TextBox1.SelectionLength = 2
Mes1 = TextBox1.SelectedText
TextBox1.SelectionStart = 6
TextBox1.SelectionLength = 2
Mes1 = TextBox1.SelectedText
[ô]Faz igual no TextBox2 utilizando as outras variaveis
Data1 = Mes1 & [Ô]/[Ô] & Dia1 & [Ô]/[Ô] & Ano1
Dim sql As String = [Ô]SELECT Codigo, nome, data FROM estagio WHERE data BETWEEN #[Ô] & Data1 & [Ô]# AND #[Ô] & Data2 & [Ô]#[Ô]
Obrigado pela ajuda até agora BEGUDO e DAMASCENO, peguei os seus exemplos de voces estudei e adaptei, dai então eu consegui resolver a minha questão da seguinte maneira, testei e deu tudo certo, não precisei fazer as jogadinhas com as datas propostas aqui, segue abaixo como foi feito e para ajudar outras pessoas.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
provider = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source =[Ô]
dataFile = [Ô]C:\Users\USER\Desktop\Banco1.accdb[Ô]
connString = provider & dataFile
myConnection.ConnectionString = connString
myConnection.Open()
Dim Data1 As Date
Dim Data2 As Date
Data1 = CDate(TextBox1.Text)
Data2 = CDate(TextBox2.Text)
[ô]Dim da As New OleDb.OleDbDataAdapter([Ô]select * from estagio where data BETWEEN #[Ô] & Data1 & [Ô]# AND #[Ô] & Data2 & [Ô]#[Ô], myConnection)
Dim da As New OleDb.OleDbDataAdapter([Ô]select * from estagio where data BETWEEN #[Ô] & Data1 & [Ô]# AND #[Ô] & Data2 & [Ô]#[Ô], myConnection)
Dim table As New DataTable()
da.Fill(table)
DataGridView1.DataSource = table
myConnection.Close()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
provider = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source =[Ô]
dataFile = [Ô]C:\Users\USER\Desktop\Banco1.accdb[Ô]
connString = provider & dataFile
myConnection.ConnectionString = connString
myConnection.Open()
Dim Data1 As Date
Dim Data2 As Date
Data1 = CDate(TextBox1.Text)
Data2 = CDate(TextBox2.Text)
[ô]Dim da As New OleDb.OleDbDataAdapter([Ô]select * from estagio where data BETWEEN #[Ô] & Data1 & [Ô]# AND #[Ô] & Data2 & [Ô]#[Ô], myConnection)
Dim da As New OleDb.OleDbDataAdapter([Ô]select * from estagio where data BETWEEN #[Ô] & Data1 & [Ô]# AND #[Ô] & Data2 & [Ô]#[Ô], myConnection)
Dim table As New DataTable()
da.Fill(table)
DataGridView1.DataSource = table
myConnection.Close()
End Sub
Tópico encerrado , respostas não são mais permitidas