Preenchendo um MSFlexGrid com ADO


Lá vou eu novamente falar sobre grades. O objetivo é mostrar como preencher o controle MSFlexGrid com os dados de uma tabela de um banco de dados. Nosso exemplo permitirá escolher entre algumas tabelas do banco de dados biblio.mdb .

Iremos fazer a conexão via ADO e preencher o grid usando a propriedade TextMatrix do MSFlexGrid.

]

Inclua o seguinte código no evento Load do formulário.


Private Sub Form_Load()
  Combo1.AddItem "Authors"
  Combo1.AddItem "Publishers"
  Combo1.AddItem "Titles"
  Combo1.ListIndex = 0
End Sub

No formulário padrão insira o código da função que irá preencher o grid . A funçao irá retornar False ou True.

Public Function PreencheFlexGrid(FlexGrid As Object, rs As Object) As Boolean

On Error GoTo ErrorHandler

If Not TypeOf FlexGrid Is MSFlexGrid Then Exit Function
If Not TypeOf rs Is ADODB.Recordset Then Exit Function

Dim i As Integer
Dim J As Integer

FlexGrid.FixedRows = 1
FlexGrid.FixedCols = 0

If Not rs.EOF Then

FlexGrid.Rows = rs.RecordCount + 1
FlexGrid.Cols = rs.Fields.Count

For i = 0 To rs.Fields.Count - 1
     FlexGrid.TextMatrix(0, i) = rs.Fields(i).Name   
' define o cabeçalho do grid
Next

i = 1
Do While Not rs.EOF

For J = 0 To rs.Fields.Count - 1
   If Not IsNull(rs.Fields(J).Value) Then
       FlexGrid.TextMatrix(i, J) = rs.Fields(J).Value
   End If
Next

i = i + 1
rs.MoveNext
Loop


End If
PreencheFlexGrid = True
ErrorHandler:
    Exit Function
End Function

No evento Click do botão de comando ( command1 ) insira o seguinte código:

Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sConnString As String

If Combo1.ListIndex <> -1 Then
  sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\teste\biblio.mdb"
  conn.Open sConnString
  rs.Open " SELECT * FROM " & Combo1.Text, conn, adOpenKeyset, adLockOptimistic

  PreencheFlexGrid MSFlexGrid1, rs

  rs.Close
  conn.Close
Else
  MsgBox "Selecione uma tabela", vbCritical, " Msflexgrid e ADO"
End If

End Sub

Execute o projeto , selecione uma tabela e clique no botão de comando. O resultado pode ser visto abaixo para a tabela Authors.

Explicando o código:

1-) Definimos o número de linhas ( Rows) e o número de colunas(Cols) do grid

FlexGrid.Rows = rs.RecordCount + 1
FlexGrid.Cols = rs.Fields.Count

2-) A seguir escrevemos os nomes dos campos( Rs.Fields(i).Name ) da tabela no grid.

For i = 0 To rs.Fields.Count - 1
     FlexGrid.TextMatrix(0, i) = rs.Fields(i).Name   
 
Next

3-) Percorremos todo o recordset (rs) até o final ( Do While Not rs.EOF ) e escrevemos no grid o valor ( rs.Fields(J).Value) de cada campo da tabela

i = 1
Do While Not rs.EOF

For J = 0 To rs.Fields.Count - 1
   If Not IsNull(rs.Fields(J).Value) Then
       FlexGrid.TextMatrix(i, J) = rs.Fields(J).Value
   End If
Next

i = i + 1
rs.MoveNext
Loop

Obs: A conexão é feita via ADO,  onde usamos:

  sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\teste\biblio.mdb"
  conn.Open sConnString
  rs.Open " SELECT * FROM " & Combo1.Text, conn, adOpenKeyset, adLockOptimistic

Até breve...