VB 2005 - DataView : Filtrando por intervalo de datas
Com o objeto DataView temos uma visão dos dados e podemos personalizar o modo de visualizar as informações de uma fonte de dados. Deve ficar claro que uma visão não é uma tabela, logo não possui dados, mas esta sempre associado a uma tabela origem.
O próprio objeto DataTable possui um modo padrão de exibição de dados: a propriedade DefaultView retorna um objeto DataView usando uma visão padrão para exibir os dados.
Eu não vou entrar em detalhes sobre o objeto DataView pois já abordei o assunto nos seguintes artigos :
Usando os conceitos relacionados ao objeto DataView vou mostrar como efetuar o filtro de dados em uma tabela do SQL Server Express 2005 usando um intervalo de datas. Vou usar a tabela Clientes do banco de dados Cadastro.mdf que foi criado no artigo : VB.NET 2005 - Acesso a fonte de dados SQL Server via código.
A seguir temos a estrutura da tabela Clientes e os dados que foram incluídos:
a- A estrutura da tabela Clientes criada no banco de dados Cadastro.mdf do SQL Server 2005 via assistentes do VB 2005
b- Um visão dos dados existentes na tabela Clientes e incluídos diretamente via janela DataBase Explorer :
O objetivo é selecionar as datas de nascimento por intervalo de datas em um programa VB.NET.
A string de conexão com o banco de dados usada e a instrução SQL que irá retornar os dados da consulta serão armazenados usando o recurso My.Settings conforme os seguintes passos:
Obs:
Criando o projeto e a interface
Inicie o VB 2005 (estou usando a versão gratuita) e crie um novo projeto com um nome sugestivo. Dei o nome dataSQLServer ao projeto.
No formulário padrão form1.vb inclua os componentes : GroupBox, Label, DateTimePicker, ListView e Button
Você deve configurar a propriedade Columns do objeto ListView - lvClientes, incluindo três colunas : Codigo, Nome e Nascimento. Na janela de propriedades do controle localize Columns e clique no botão para exibir a janela ColumnHeader Collection Editor. A seguir informe os valores para as propriedades Name, Text e Width. A propriedade View do controle ListView deverá ser definida como Details. |
Defina a seguinte importação : Imports System.Data.sqlclient pois vamos acessar uma fonte de dados SQLServer.
A seguir defina as variáveis objetos usadas no projeto:
Dim
cn As SqlConnectionNo evento Load do formulário vamos definir a conexão com a fonte de dados e a string para montar a instrução SQL obtendo os valores via recurso My.Settings.
Private
Sub Form1_Load(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
MyBase.Load cn = New SqlConnection(My.Settings.strConexao)daAniversarios = New SqlDataAdapter(My.Settings.strSQL, cn)ds = New DataSet daAniversarios.Fill(ds, "Clientes")carregaLista() End Sub |
A rotina carregaLista() carrega os dados atuais da tabela clientes e os exibe no ListView - lvClientes.
Private
Sub carregaLista() For i As Integer = 0 To ds.Tables("Clientes").Rows.Count - 1 lvClientes.Items.Add(ds.Tables( "Clientes").Rows(i)("Codigo"))lvClientes.Items(i).SubItems.Add(ds.Tables("Clientes").Rows(i)("Nome")) lvClientes.Items(i).SubItems.Add(Format(ds.Tables("Clientes").Rows(i)("Nascimento"), "Short Date")) Next End Sub |
O código do botão Selecionar monta o critério de seleção usando o intervalo de datas selecionado pelo usuário nos controles DateTimePicker , dtpINicio e dtpFim. Note que estamos convertendo a data para string usando o formato Short Date.
Em seguida criamos o DataView usando o critério e a ordenação pela data de nascimento ascendente e exibindo as linhas originais.
Private
Sub
btnSelecionar_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
btnSelecionar.ClickDim
vCriterio As
String
vCriterio = "Nascimento >= " + "'" + Convert.ToString(Format(Me.dtpInicio.Value, "Short Date")) + "'"vCriterio &= " and Nascimento <= " + "'" + Convert.ToString(Format(Me.dtpFim.Value, "Short Date")) + "'" dvAniversarios = New DataView(ds.Tables("Clientes"), vCriterio, "Nascimento ASC", DataViewRowState.OriginalRows) Me.lvClientes.Items.Clear() For i As Integer = 0 To dvAniversarios.Count - 1lvClientes.Items.Add(dvAniversarios.Item(i).Item(0).ToString) |
Abaixo temos o resultado da execução do projeto para o intervalo entre : 02/07/1960 e 02/07/1980. Neste caso a variável vCriterio possuirá o seguinte valor: "Nascimento >= '2/7/1960' and Nascimento <= '2/7/1980'"
Pegue o projeto completo aqui : dataSQLServer.zip (63 Kb - sem a base de dados)
Obs: Você deve alterar a string de conexão com o banco de dados para refletir a localização usada no seu ambiente.
Até o próximo artigo...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: