VB -
FlashBack : MsFlexGrid preenchendo o controle com dados II
Continuando o flashback sobre o MSflexGrid vamos melhorar o projeto do artigo - VB - FlashBack : MsFlexGrid preenchendo o controle com dados- e criar um visualizador genérico de tabelas só que vamos variar um pouco fazendo o acesso aos dados usando DAO.
Para saber mais sobre DAO leia os seguintes artigos do site:
Se você esta chegando agora e pretende aprender Visual Basic para acessar dados , o MsFlexGrid é um controle com muitos recursos que você pode usar para obter resultados satisfatórios. Então leia os artigos do site já publicados a respeito:
Preenchendo um MSFlexGrid com dados de uma tabela selecinada
Abre o seu Visual Studio o u Visual Basic e crie um novo projeto do tipo Standard EXE
Antes de iniciar é preciso incluir os controles CommonDialog e MSflexGrid na ToolBox. Faça isto no menu Project|Components e selecione em seguida os controles indicados.
No formulário padrão inclua os controles : TextBox ,Label, CommandButton, CommondDialog e MSFlexGrid
Na seção General Declarations do formulário defina as variáveis que serão visíveis em todo o formulário:
Option Explicit
'define as variaveis
objeto para banco de dados e recordset
Dim db As Database
Dim rs As Recordset
Dim arquivoDB As String
Dim senhaDB As String
O evento Load do formulário irá chamar a janela de diálogo para selecionar o banco de dados:
Private
Sub Form_Load() Call mostra_db End Sub |
No evento Click do botão que irá abrir a janela de diálogo - Selecione o Banco de Dados - irá limpar as caixas de listagem e também chamar a rotina que exibe a janela para selecionar o banco de dados:
Private
Sub Command2_Click() List1.Clear List2.Clear Call mostra_db End Sub |
O código da rotina mostraDB que mostra a janela de diálogo para selecionar o banco de dados é o seguinte :
Sub mostra_db() 'filtra os arquivos com extensão .mdb CDialog.Filter = "MDB Arquivos (*.mdb)|*.mdb" 'define o titulo da janela CDialog.DialogTitle = "Arquivo Mdb selecionado" 'abre a janela CDialog.ShowOpen arquivoDB = CDialog.FileName lblnomedb.Caption = arquivoDB senhaDB = InputBox("Informe a senha do Banco de dados se ele estiver protegido com senha", "Banco de dados") End Sub |
No evento Click do botão - Exibir Tabelas - que irá exibir as tabelas no ListBox.
Private Sub Command1_Click() Dim i As Integer On Error GoTo trata_Erro 'limpa o conteudo do controle listbox List1.Clear 'se foi informado o nome do arquivo então abre o arquivo e preenche o listbox com as tabelas If arquivoDB <> "" Then If senhaDB <> "" Then Set db = OpenDatabase(arquivoDB, False, False, "MS Access;pwd=" & senhaDB) Else Set db = OpenDatabase(arquivoDB, False, False) End If 'prenche o listbox com todas as tabelas do banco de dados For i = 0 To db.TableDefs.Count - 1 List1.AddItem db.TableDefs(i).Name Next End If Exit Sub trata_Erro: 'se houver senha deve ser informada If Err.Number = 3031 Then senhaDB = InputBox("Informe a senha : ") Else MsgBox Err.Number & " : " & Err.Description End If End Sub |
Quando o usuário clicar no controle ListBox para selecionar uma tabela a mesma deverá ter sua estrutura exibida no segundo ListBox e os seus dados no controle MsFlexGrid. O código que faz isto é o seguinte :
Private Sub List1_Click() Dim i As Integer Dim sno As Integer 'MousePointer = vbHourglass 'limpa o listbox List2.Clear 'inclui o cabeçalho no listbox List2.AddItem "Nome" & vbTab & vbTab & "Tipo" & vbTab & "Tamanho" For i = 0 To db.TableDefs(List1.ListIndex).Fields.Count - 1 List2.AddItem db.TableDefs(List1.ListIndex).Fields(i).Name & vbTab & _ db.TableDefs(List1.ListIndex).Fields(i).Type & vbTab & db.TableDefs(List1.ListIndex).Fields(i).Size Next 'Exibindo os dados da tabela selecionada 'limpa o controle msflexgrid MSFlexGrid1.Clear 'tratamento de erro On Error Resume Next Set rs = db.OpenRecordset("select count(*) from [" & List1.List(List1.ListIndex) & "]") If Err.Number <> 0 Then MsgBox "O recordset não pode ser aberto devido ao erro: " & Err.Description MousePointer = vbDefault Exit Sub End If If rs(0) > 0 Then MSFlexGrid1.Rows = rs(0) + 1 Else MSFlexGrid1.Rows = 2 End If 'abre um recordset para a tabela selecionada Set rs = db.OpenRecordset("select * from [" & List1.List(List1.ListIndex) & "]") MSFlexGrid1.Cols = rs.Fields.Count + 1 sno = 1 MSFlexGrid1.Row = 0 MSFlexGrid1.Col = 0 MSFlexGrid1.Text = "Sno" For i = 0 To rs.Fields.Count - 1 MSFlexGrid1.Col = i + 1 MSFlexGrid1.Text = rs.Fields(i).Name Next If rs.EOF = False Then 'Atribuindo o nome das colunas para o flexgrid While Not rs.EOF MSFlexGrid1.Row = sno MSFlexGrid1.Col = 0 MSFlexGrid1.Text = sno For i = 0 To rs.Fields.Count - 1 MSFlexGrid1.Col = i + 1 MSFlexGrid1.Text = IIf(IsNull(rs(i)), "", rs(i)) Next sno = sno + 1 DoEvents rs.MoveNext Wend End If MousePointer = vbDefault End Sub |
O resultado será exibido conforme a janela abaixo:
Pegue o projeto completo aqui :
flexEstrutura.zip
Eu sei é apenas VB.NET , e daí , eu gosto
....
José Carlos Macoratti