You are on page 1of 4

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 :

 VB .NET - ADO.NET - Uma visão geral III : DataView.
 VB .NET - Filtrando valores NULL em um DataView.
 VB .NET - Preenchendo uma combobox.

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:

1. Clique com o botão direito sobre My Project na janela Solution Explorer e selecione Open.

Pronto ! já podemos recuperar estas informações a partir de My. Eu usei os nomes strConexao e strSQL. Na janela a seguir selecione Settings e informe um nome para a string de conexão e para a string SQL na coluna Name.lvClientes. Label. Dei o nome dataSQLServer ao projeto. Defina a seguinte importação : Imports System. No formulário padrão form1. A seguir inclua a string de conexão e string com os comandos SQL na coluna Value e salve a operação. A propriedade View do controle ListView deverá ser definida como Details. 2. ListView e Button Nome usado no Controle projeto DateTimePickerdtpInicio dtpFim ListView lvClientes Button btnSelecionar Você deve configurar a propriedade Columns do objeto ListView . A string SQL usa uma instrução SELECT selecionando os campos codigo. A seguir informe os valores para as propriedades Name. Na janela de propriedades do controle localize Columns e clique no botão para exibir a janela ColumnHeader Collection Editor. . nome . Nome e Nascimento. incluindo três colunas : Codigo. nome e nascimento da tabela Clientes ordenada por nascimento : SELECT codigo. nascimento FROM Cliente ORDER By nascimento 2. Obs:  1.Data. DateTimePicker.Settings em tempo de execução.vb inclua os componentes : GroupBox. Text e Width. A String de conexão foi obtida do assistente para criação de uma nova base de dados 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.sqlclient pois vamos acessar uma fonte de dados SQLServer.

SubItems.Items(i).Load cn = New SqlConnection(My.Item(i).Items.Click Dim vCriterio As String vCriterio = "Nascimento >= " + "'" + Convert. "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 .Value. DataViewRowState.Items(i). "Short Date")) Next End Sub .Settings. Private Sub btnSelecionar_Click(ByVal sender As System.strConexao) daAniversarios = New SqlDataAdapter(My.A seguir defina as variáveis objetos usadas no projeto: Dim cn As SqlConnection Dim daAniversarios As SqlDataAdapter Dim ds As DataSet Dim dvAniversarios As DataView No 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.SubItems.Items(i).Rows(i)("Codigo")) lvClientes.Rows.Add(Format(dvAniversarios.Tables("Clientes").Add(dvAniversarios.Tables("Clientes").Settings.Tables("Clientes"). vCriterio. Private Sub Form1_Load(ByVal sender As System.Object.Rows(i)("Nascimento").Add(Format(ds.strSQL.1 lvClientes.Object. ByVal e As System.Items.Item(i). Private Sub carregaLista() For i As Integer = 0 To ds.SubItems.EventArgs) Handles MyBase.Tables("Clientes").lvClientes.ToString(Format(Me. "Nascimento ASC". ByVal e As System.Clear() For i As Integer = 0 To dvAniversarios.Add(ds.lvClientes.ToString(Format(Me.dtpFim.OriginalRows) Me. Note que estamos convertendo a data para string usando o formato Short Date.Item(0).Count .Item(1).Items. "Short Date")) + "'" vCriterio &= " and Nascimento <= " + "'" + Convert.1 lvClientes.Value. cn) ds = New DataSet daAniversarios.Fill(ds. dtpINicio e dtpFim.Add(ds.Item(2).Settings.Tables("Clientes").ToString)) lvClientes.EventArgs) Handles btnSelecionar. "Clientes") carregaLista() End Sub A rotina carregaLista() carrega os dados atuais da tabela clientes e os exibe no ListView .Count .Add(Format(dvAniversarios.ToString) lvClientes. "Short Date")) + "'" dvAniversarios = New DataView(ds. Em seguida criamos o DataView usando o critério e a ordenação pela data de nascimento ascendente e exibindo as linhas originais.Items(i).Item(i).Rows(i)("Nome")) lvClientes.SubItems.dtpInicio.

Abaixo temos o resultado da execução do projeto para o intervalo entre : 02/07/1960 e 02/07/1980.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. 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.  José Carlos Macoratti .