VB6 - Como criar um paginador p/Banco de dados


 

Sabe por que eu gosto do VB ?  Por que é fácil de aprender e usar e com ele você pode fazer coisas incríveis antes só possíveis para 'iniciados'.

 

Por isto não me canso de repetir : Eu sei , é apenas VB , mas eu gosto...

 

Grande parte de meus artigos referem-se ao acesso a fonte de dados usando VB. Creio que este assunto abranja hoje mais de 60% do assunto quando se pensa em desenvolver uma aplicação Windows.

 

Neste artigo vou voltar a usar DAO - Data Access Object , lembra dela ou dele ???

 

Pois bem, o DAO ainda é uma ferramenta poderosa de acesso aos dados quando usada de forma conveniente e para o problema específico.

 

Quer uma aplicação com acesso a banco de dados para desktop com bom desempenho ?  Use DAO.

 

Vamos supor que você tenha um banco de dados que esta crescendo, crescendo , e, precisa carregar os dados de uma tabela de forma rápida em um controle de listagem de forma que permita escolher os pedidos em uma lista e então exibir os detalhes completos dos dados de um pedido em um controle ListBox.

 

Para o exemplo deste artigo eu vou usar o banco de dados Northwind.mdb. Por que sempre faço isso ? Porque quase todo mundo tem o bom e velho Northwind.mdb.

 

Neste banco de dados existe a tabela Orders que contem as informações dos pedidos de uma empresa. Sua estrutura é a seguinte:

 

 

Como eu quero carregar de forma rápida as informações em um ListBox vou exibir na lista somente os seguintes campos: OrderId, ShipCountry e OrderDate. Assim eu identifico o pedido e posso selecionar os detalhes de um pedido apenas clicando no mesmo.

 

A aplicação será composta de dois formulários:

Inicie então um novo projeto no VB do tipo Standard EXE e inclua no formulário - form1.frm - os controles : ListBox , Label e CommandButton, conforme abaixo:

 

 

A seguir , no Menu Project , selecione Add form,  e,  adicione o formulário form2 no projeto, incluindo em seguida neste formulário, os controles TextBox (Text1()) , CommandButton e Label , conforme abaixo:

 

- Os controles TextBox foram incluídos com um array de controles , assim temos os controles TextBox : Text1(0), Text1(1), Text1(2), Text1(3), Text1(4)

 

Voltando ao formulário - form1 - inclua o seguinte código no formulário:

 

Option Explicit
Dim db As Database
Const caminho = "c:\teste\northwind.mdb"
 
Private Sub Form_Load()
Dim rs As Recordset

Set db = OpenDatabase(caminho)
Set rs = db.OpenRecordset("Select OrderID, ShipCountry, OrderDate from Orders order by orderid")
Do Until rs.EOF
  List1.AddItem rs.Fields("OrderId") & vbTab & rs.Fields("ShipCountry") & "  -  " & rs.Fields("OrderDate")
  List1.ItemData(List1.NewIndex) = rs.Fields("OrderId")
  rs.MoveNext
  
Loop
rs.Close
Set rs = Nothing

End Sub
Private Sub List1_Click()
Dim rs As Recordset
Dim f As Form2
Dim codigo As Long
Set f = New Form2
codigo = List1.ItemData(List1.ListIndex)
Set rs = db.OpenRecordset("Select * from orders where orderid = " & codigo)

f.Text1(0) = rs.Fields("OrderID")
f.Text1(1) = rs.Fields("ShipCountry") & ""
f.Text1(2) = rs.Fields("OrderDate")
f.Text1(3) = rs.Fields("ShipAddress") & ""
f.Text1(4) = rs.Fields("ShipCity") & ""
f.Show vbModeless, Me

rs.Close
Set rs = Nothing

End Sub
 
Private Sub Command1_Click()
   Unload Me
End Sub

 

No evento Load do formulário form1, eu defini um banco de dados , um recordset e abri a conexão com o banco de dados Northwind.mdb

 

A seguir eu percorro o recordset com os dados extraídos da tabela Orders via comando SQL , exibo os dados no ListBox e , usando a linha de comando: List1.ItemData(List1.NewIndex) = rs.Fields("OrderId") defino um índice único para a propriedade ItemData.

 

Eu uso então o evento Click do ListBox (poderia ter usado o DblClick) para que quando o usuário clicar em um item da lista aconteça o seguinte:

  1. defino um novo recordset

  2. defino um novo formulário do tipo form2 (Dim f As Form2)

  3. codigo = List1.ItemData(List1.ListIndex) - pega o código da propriedade ItemData e armazena na variável codigo

  4. Abre o recordset filtrando o pedido com o código obtido anteriormente

  5. Atribuo os valores do recordset as caixas de texto do formulário

O formulário form2 somente tem o código para ser fechado quando o usuário clicar no botão : Fechar.

 

Executando o projeto e selecionando alguns pedidos temos:

 

 

Com uma pequena quantidade de código conseguimos efetuar uma tarefa que se fosse feita em outras linguagens de programação levariam mais tempo e não teriam o desempenho que o VB tem , neste caso.

 

Pegue o projeto aqui : vbPaginacao.zip

 

Eu sei , é apenas VB, mas,  eu gosto !!!

 


José Carlos Macoratti