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...