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:

  1. Clique com o botão direito sobre My Project na janela Solution Explorer e selecione Open.
  2. Na janela a seguir selecione Settings e informe um nome para a string de conexão e para a string SQL na coluna Name. Eu usei os nomes strConexao e strSQL. A seguir inclua a string de conexão e string com os comandos SQL na coluna Value e salve a operação. Pronto ! já podemos recuperar estas informações a partir de My.Settings em tempo de execução.

Obs: 

  1. A string SQL usa uma instrução SELECT selecionando os campos codigo, nome e nascimento da tabela Clientes ordenada por nascimento : SELECT codigo, nome , nascimento FROM Cliente ORDER By nascimento
  2. 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. Dei o nome dataSQLServer ao projeto.

No formulário padrão form1.vb inclua os componentes : GroupBox, Label, DateTimePicker, ListView e Button

Controle Nome usado no projeto
DateTimePicker dtpInicio
  dtpFim
ListView lvClientes
Button btnSelecionar

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 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.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.Click

Dim 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 - 1

lvClientes.Items.Add(dvAniversarios.Item(i).Item(0).ToString)
lvClientes.Items(i).SubItems.Add(Format(dvAniversarios.Item(i).Item(1).ToString))
lvClientes.Items(i).SubItems.Add(Format(dvAniversarios.Item(i).Item(2),
"Short Date"))

Next

End Sub

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:


José Carlos Macoratti