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 idéia é 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 idéia é 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 critério de seleção informado pelo usuário em uma caixa de texto sejam armazenados em array.
Introdução
Já ouviu falar no controle Slider ? Não ? bem , então 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 critério de seleção associados ao controle Slider
Ao mover o controle usando o mouse ou o teclado temos a movimentação 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 :
|
Inicie um novo projeto no VB e no formulário padrão insira os seguintes controles no formulário :
O jeitão do formulário deverá ser o seguinte:
E vou usar uma conexão DAO , mas você pode usar uma conexão ADO ou RDO , não importa...
O código do projeto
Na seção General Declarations vamos declarar as variáveis usadas no sistema :
Option Explicit Private Tab_encontrados() As String Dim bdBiblio As Database Dim rsPublishers As Recordset |
bdBiblio e rsPublishers são variáveis objeto para o banco de dados e recordset.
Declaramos também um array chamado Tab_encontrados() do tipo String que vai armazenar os dados da tabela Publishers.
Vamos agora ao código do evento Click do botão 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 critério 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 critério informado !", vbCritical, "Procurar" Exit Sub End If mostra_dados 0 End Sub |
Vou explicar as partes mais importantes do código acima:
1- Após declarar as variáveis e verificar se algum critério foi fornecido pelo usuário abrimos a base de dados e definimos a tabela a usar . (Eu usei uma conexão DAO mas fique a vontade você pode usar qualquer outra conexão...)
2- Em seguida se algo foi encontrado de acordo com o critério ( o critério pode ser uma letra , uma palavra , etc...) percorremos o recordset fazemos a seguinte verificação :
If InStr(1, .Fields(1), Text1, vbTextCompare) > 0 (para maiores detalhes veja: strings, strings, strings.)
Aqui eu estou usando a função Instr que tem a seguinte sintaxe:
Instr$(Inicio,string1,string2,[Compare]) - Determina a posição da primeira ocorrência de uma substring contida em uma string. Retorna uma variant do tipo Long.
Eu estou procurando a partir da posição 1 na string representada por .Fields(1) - que aqui é a coluna Name - então eu estou procurando a partir da posição 1 no campo nome , pelo critério informado em Text1 usando o modo de comparação - vbTextCompare - ou seja uma comparação Textual. Se eu encontrar então teremos que o valor retornado será maior que zero .
3- O próximo 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 instrução Redim para realocar o espaço de armazenagem do array Tab_encontrados.
Como a tabela Publishers possui 10 campos , eu vou definir o array bidimensional , com o tamanho : Tab_encontrados(9, i) (como o primeiro elemento tem índice 0 , 9 indica que teremos 10 elementos)
A seguir em um laço 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 então fechar o banco de dados e o recordset , habilitar o controle slider se houver algum valor no array. Para verificar isto usamos a função Ubound :
If UBound(Tab_encontrados, 2) = 0 Then
Aqui estamos usando a função Ubound ,UBound - Retorna um valor do tipo Long contendo o MAIOR índice para a dimensão definida de um array. Sintaxe: LBound(nome_do_array[, dimensão])
Se o índice for maior que zero então temos dados no array
5- A seguir atribuimos os valores máximos e mínimos 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 função : mostra_dados. Vejamos o seu código :
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 código apenas atribui os valores do array - Tab_Econtrados() - a cada caixa de texto.
Para permitir que os dados sejam exibidos pela movimentação do controle precisamos do seguinte código :
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 numéro e as marcas representando a quantidade de valores associados ao controle. Assim você esta exibindo os dados sem uma conexão com a base de dados.
Gostou ???? Então pegue o código arqui - - Slider.zip Até mais , bye ...
José Carlos Macoratti