Vous êtes sur la page 1sur 8

VB - Armazenando dados de uma tabela em um array

Neste artigo eu vou mostrar como voc pode armazenar os dados de um tabela em um array (matriz) formando assim uma
matriz de dados.
A idia armazenar os dados de uma busca em uma tabela em um array predefinido. Para variar um pouco vou mostrar como
usar o controle slider para navegar pelos registros obtidos pela consulta e armazenados no array.
A idia a seguinte : Vamos usar o banco de dados Biblio.mdb e fazer uma busca na tabela Publishers pela coluna Name de
forma que todos os registros obtidos pelo critrio de seleo informado pelo usurio em uma caixa de texto sejam armazenados
em array.

Introduo
J ouviu falar no controle Slider ? No ? bem , ento vou apresent-lo... E-lo
O controle Slider esta presente na OCX - MSCOMCTL.OCX - Microsoft Windows Common Controls , e muito til quando
desejamos associar valores consecutivos dentro de um intervalo. No nosso caso teremos sempre um conjunto de registros
obtidos pelo critrio de seleo associados ao controle Slider
Ao mover o controle usando o mouse ou o teclado temos a movimentao pelos valores associados , no nosso caso os registros
da tabela Publishers. A tabela Publishers possui a seguinte estrutura:

A tabela possui 10 campos. A pesquisa ser feita pelo campo Name e iremos exibir os
campos :
PubID - Cdigo
Company Name - Empresa

Address - Endereo

Inicie um novo projeto no VB e no formulrio padro insira os seguintes controles no formulrio :

1. Um controle TextBox - text1 - onde o usurio vai informa o critrio para busca
2. Um controle CommandButton - command1 - Procurar - onde disparado a rotina para iniciar a busca e preencher o
array
3. um controle Frame - frame1 - para agrupar os dados que vamos exibir como resultado da busca
4. Os controles : text2 para exibir o cdigo , text3 para exibir a empresa e text4 para exibir o endereo
5. Um controle Slider - Slider1 - que iremos associar aos registros armazenados no array como resultado da busca
O jeito do formulrio dever ser o seguinte:

E vou usar uma conexo DAO , mas voc pode usar uma conexo ADO ou RDO , no importa...

O cdigo do projeto
Na seo General Declarations vamos declarar as variveis usadas no sistema :
Option Explicit
Private Tab_encontrados() As String
Dim bdBiblio As Database
Dim rsPublishers As Recordset
bdBiblio e rsPublishers so variveis objeto para o banco de dados e recordset.
Declaramos tambm um array chamado Tab_encontrados() do tipo String que vai armazenar os dados da tabela Publishers.

Vamos agora ao cdigo do evento Click do boto de comando - command1 :


Private Sub Command1_Click()
Dim i As Integer, f As Byte, encontrado As Boolean
If Len(Text1.Text) = 0 Then
MsgBox "Informe um critrio para busca ! ", vbCritical, "Procurar"
Exit Sub
Else ' Vamos buscar
Set bdBiblio = OpenDatabase(App.Path & "\Biblio.mdb")
Set rsPublishers = bdBiblio.OpenRecordset("Publishers")
With rsPublishers
.MoveFirst
encontrado = False
Do While Not .EOF
'se encontrou o criterio informado na coluna 1 - campo Name
If InStr(1, .Fields(1), Text1, vbTextCompare) > 0 Then
ReDim Preserve Tab_encontrados(9, i)
For f = 0 To 9
Tab_encontrados(f, i) = .Fields(f) & ""
Next f
i=i+1
encontrado = True
End If
.MoveNext
Loop
.Close
End With
bdBiblio.Close
Set rsPublishers = Nothing
End If
If encontrado Then
Slider1.Enabled = True

'verifica o tamanho do vetor para a dimensao 2


If UBound(Tab_encontrados, 2) = 0 Then
Slider1.Visible = False
Else
Slider1.Visible = True
Slider1.Max = UBound(Tab_encontrados, 2) + 1
Slider1.Min = 1
Slider1.SetFocus
End If
Else
MsgBox "Nada foi encontrado para o critrio informado !", vbCritical, "Procurar"
Exit Sub
End If
mostra_dados 0
End Sub
Vou explicar as partes mais importantes do cdigo acima:
1- Aps declarar as variveis e verificar se algum critrio foi fornecido pelo usurio abrimos a base de dados e definimos a
tabela a usar . (Eu usei uma conexo DAO mas fique a vontade voc pode usar qualquer outra conexo...)
2- Em seguida se algo foi encontrado de acordo com o critrio ( o critrio pode ser uma letra , uma palavra , etc...) percorremos
o recordset fazemos a seguinte verificao :

If InStr(1, .Fields(1), Text1, vbTextCompare) > 0

(para maiores detalhes veja: strings, strings, strings.)

Aqui eu estou usando a funo Instr que tem a seguinte sintaxe:

Instr$(Inicio,string1,string2,[Compare]) - Determina a posio da primeira ocorrncia de uma substring contida em uma


string. Retorna uma variant do tipo Long.

Eu estou procurando a partir da posio 1 na string representada por .Fields(1) - que aqui a coluna Name - ento eu estou
procurando a partir da posio 1 no campo nome , pelo critrio informado em Text1 usando o modo de comparao vbTextCompare - ou seja uma comparao Textual. Se eu encontrar ento teremos que o valor retornado ser maior que zero .
3- O prximo bloco a se executado ser o seguinte :
ReDim Preserve Tab_encontrados(9, i)
For f = 0 To 9
Tab_encontrados(f, i) = .Fields(f) & ""
Next f
i=i+1
encontrado = True
Aqui eu estou usando a instruo Redim para realocar o espao de armazenagem do array Tab_encontrados.
Como a tabela Publishers possui 10 campos , eu vou definir o array bidimensional , com o tamanho :
(como o primeiro elemento tem ndice 0 , 9 indica que teremos 10 elementos)

Tab_encontrados(9, i)

A seguir em um lao for/next eu vou percorrer os dez elementos do array e atribuir a cada um o respectivo campo definido em -

. Fields(f)
No final teremos um array bidimensional preenchido com os valores encontrados pela busca no recordset Publishers.
4- Podemos ento fechar o banco de dados e o recordset , habilitar o controle slider se houver algum valor no array. Para
verificar isto usamos a funo Ubound :

If UBound(Tab_encontrados, 2) = 0 Then
Aqui estamos usando a funo Ubound ,UBound - Retorna um valor do tipo Long contendo o MAIOR ndice para a dimenso
definida de um array. Sintaxe:
LBound(nome_do_array[, dimenso])
Se o ndice for maior que zero ento temos dados no array

5- A seguir atribuimos os valores mximos e mnimos para o controle slider em :

Slider1.Max = UBound(Tab_encontrados, 2) + 1
Slider1.Min = 1
6- S falta mostrar os dados , para isto invocamos a funo : mostra_dados. Vejamos o seu cdigo :
Public Sub mostra_dados(num As Integer)
Dim i As Byte
If UBound(Tab_encontrados, 2) = 0 Then
Frame1.Caption = "Registro: 1/1"
Else
Frame1.Caption = "Registro: " & Slider1.Value & "/" & Slider1.Max
End If
Text2.Text = Tab_encontrados(0, num) ' coluna codigo
Text3.Text = Tab_encontrados(2, num) ' coluna empresa
Text4.Text = Tab_encontrados(3, num) ' coluna endereco
End Sub
Este cdigo apenas atribui os valores do array - Tab_Econtrados() - a cada caixa de texto.
Para permitir que os dados sejam exibidos pela movimentao do controle precisamos do seguinte cdigo :
Private Sub Slider1_Change()
mostra_dados Slider1.Value - 1
End Sub
Private Sub Slider1_Click()
mostra_dados Slider1.Value - 1
End Sub
Lembrando que podemos movimentar o controle com o mouse , teclado e com as teclas PgDown Page Up.

Executando o projeto teremos a seguinte tela para uma busca pela letra Z :

Exibimos o registro atual e quantidade total de registros e o controle slider ao ser movido indica para qual registro se move e
exibe na parte inferior este numro e as marcas representando a quantidade de valores associados ao controle. Assim voc esta
exibindo os dados sem uma conexo com a base de dados.
Gostou ???? Ento pegue o cdigo arqui

- Slider.zip At mais , bye ...

Jos Carlos Macoratti

Vous aimerez peut-être aussi