VB - Carregando dados em um MSFlexGrid e DataGrid
Neste artigo irei mostrar como preencher um controle MSFLexGrid e depois um DataGrid com dados de uma tabela de um banco de dados Access. Creio que já escrevi um artigo sobre este assunto , mas aqui eu quero chamar a atenção para a formatação das colunas e dos grids no formulário.
Eu tenho uma tabela clientes em um banco de dados clientes.mdb que tem a seguinte estrutura:
Pois bem , vou exibir os dados desta na tabela em um controle MSFlexGrid do VB6. Para isto inicie um novo projeto no VB e no formulário padrão insira um controle MSFlexGrid no menu Project|Add Components. Seu form deve ficar parecido com a figura abaixo:
Agora eu vou criar uma função que deve receber dois parâmetros :
O código da função que chamarei - encheGrid - é o seguinte :
Private
Function encheGrid(dados As String, sql As String) Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim coluna As Integer Dim linha As Integer Dim largura_coluna() As Single Dim largura_campo As Single ' abre a conexao Set conn = New ADODB.Connection conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & dados & ";" & "Persist Security Info=False" conn.Open ' pega os registros Set rs = conn.Execute(sql, , adCmdText) ' define linhas fixas igual a uma e não usa colunas fixas MSFlexGrid1.Rows = 2 MSFlexGrid1.FixedRows = 1 MSFlexGrid1.FixedCols = 0 ' define o numero de linhas e colunas e cria uma matrix com o total de registros a exibir MSFlexGrid1.Rows = 1 MSFlexGrid1.Cols = rs.Fields.Count ReDim largura_coluna(0 To rs.Fields.Count - 1) ' exibe os cabeçalhos das colunas For coluna = 0 To rs.Fields.Count - 1 MSFlexGrid1.TextMatrix(0, coluna) = rs.Fields(coluna).Name largura_coluna(coluna) = TextWidth(rs.Fields(coluna).Name) Next coluna ' exibe o valor de cada linha linha = 1 Do While Not rs.EOF MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 For coluna = 0 To rs.Fields.Count - 1 MSFlexGrid1.TextMatrix(linha, coluna) = rs.Fields(coluna).Value ' verifica o tamanho dos campos largura_campo = TextWidth(rs.Fields(coluna).Value) If largura_coluna(coluna) < largura_campo Then largura_coluna(coluna) = largura_campo Next coluna rs.MoveNext linha = linha + 1 Loop ' fecha o recordset e a conexao rs.Close conn.Close ' define a largura das colunas do grid For coluna = 0 To MSFlexGrid1.Cols - 1 MSFlexGrid1.ColWidth(coluna) = largura_coluna(coluna) + 240 Next coluna End Function |
No código acima estou fazendo o acesso ao banco de dados usando ADO. A string de conexão é :
conn.ConnectionString
= "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & dados & ";" & "Persist
Security Info=False"
O grid é preenchido em um laço For/Next
usando a propriedade TextMatrix(linha,Coluna)
MSFlexGrid1.TextMatrix(linha, coluna) = rs.Fields(coluna).Value
rs.fields(coluna).Value representa o valor dos campos da tabela.
A seguir basta chamar a função ; pode ser no evento Load do formulário como mostrado a seguir :
Private Sub
Form_Load() Call encheGrid("c:\teste\clientes.mdb", "Select * from clientes ORDER BY nome") End Sub |
Para ajustar o tamanho do grid ao formulário insira o código a seguir no evento Resize do formulário:
Private Sub
Form_Resize() MSFlexGrid1.Move 0, 0, ScaleWidth, ScaleHeight End Sub |
Executando o projeto teremos:
Carregando dados em DataGrid e exibindo o valor de uma célula selecionada
Agora vou fazer a mesma coisa usando um controle DataGrid e usando um Ado Data Control. O objetivo é exibir os dados no DataGrid . Para isto eu vou fazer a conexão com o banco de dados usando o Ado Data Control e depois vincular este controle ao DataGrid.
Vamos então inserir os componentes DataGrid e Ado Data Control no formulário através do menu Project|Add Components.(Insira também um botão de comando). O layout do formulário deverá ser parecido com a figura abaixo:
|
DataGrid -
name = grdClientes ADODC - name = adodcClientes Botão de comando - name = cmdSeleciona |
O usuário irá selecionar uma célula e suas coordenadas ( linha , coluna) serão exibidas , juntamente com o valor da célula em uma mensagem.
Vou criar uma função chamada - CarregaDados - que irá exibir os dados no dataGrid. Seu código é o seguinte:
Public Sub
CarregaDados() Dim dados As String ' pega o caminho do banco de dados dados = App.Path If Right$(dados, 1) <> "\" Then dados = dados & "\" dados = dados & "clientes.mdb" ' Conecta o controle ADODC com o banco de dados adodcClientes.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & dados & ";" adodcClientes.RecordSource = "SELECT * FROM clientes ORDER BY nome" ' vincula o adodc ao datagrid Set grdClientes.DataSource = adodcClientes End Sub |
O código do botão - Seleciona - que irá exibir os valores das células e suas linhas e colunas é :
Private Sub
cmdSeleciona_Click() ' Exibe o valor atual da celula MsgBox "Celula (" & grdClientes.Row & ", " & grdClientes.Col & ") " & vbCrLf & "Valor = " & grdClientes.Text grdClientes.SetFocus End Sub |
Incluimos também um código no evento Resize do formulário para ajustar o grid ao formulário:
Private Sub
Form_Resize() 'ajusta o tamanho do dbgrid ao formulário quando este for dimensionado Dim largura As Single largura = ScaleWidth - cmdSeleciona.Width - 120 If largura < 120 Then largura = 120 grdClientes.Move 0, 0, largura, ScaleHeight cmdSeleciona.Left = ScaleWidth - cmdSeleciona.Width - 60 End Sub |
Para chamar a função que carrega e exibe os dados podemos usar o evento Load do formulário:
Private Sub
Form_Load() CarregaDados End Sub |
Pronto ! Matei dois coelhos de uma vez... Até o próximo artigo...
José Carlos Macoratti