VB - Tutorial DBGrid


Ninguém pode falar que eu não tratei do assunto DBGrid no site... Acho que até falei demais sobre ele , basta olhar a relação abaixo dos artigos sobre DBGrid no site :

1- Personalizando e incrementando o DBGrid
2-
DBGrid - Revisitado
3-
Utilização da Grade Vinculada aos dados: DbGrid
4-
Acessando Arquivo Texto c/DBGrid e o Controle Data
5-
Ordenando a coluna com o foco em um DBGrid
6-
Usando o DBGrid no modo não vinculado
7-
DBGrid - Capturando o conteúdo de uma célula

Em tempos de VB.NET e diversas mudanças eu creio que o DBGrid não deverá ser tão usado , eu especialmente não o utilizo mais. Mas como muita gente me envia dúvidas sobre este controle eu estarei falando mais uma vez sobre o DBGrid. Vou mostrar algumas utilizações onde usamos propriedades que podem tornar mais fácil a vida daqueles que usam o DBGrid.

1- O Básico - vinculando o DBGrid ao controle Data Control para exibir os dados de uma tabela

Se você esta torcendo o nariz por eu estar falando de um assunto tão básico , dá um tempo 'beibe' , tem muita gente engatinhando ainda , e olha que muitos deles serão melhores que eu e você

OK ! você só quer ter o prazer de exibir os dados de uma tabela de um banco de dados em um grid. Se for só isto presta atenção agora:

- Inicie o Visual Basic e no inclua no formulário padrão - form1 - um controle Data Control - Data1 e outro controle DBgrid - DBGrid1 , conforme abaixo :

Agora só falta algums detalhes para que ao executar o projeto os dados apareçam no grid. Você tem vincular o Data Control - Data1 - ao banco de dados , selecionar o tipo de conjuntos ( Table , Dynaset ou SnapShot) e escolher qual das tabelas do banco de dados vai querer exibir. Você pode fazer isto via código ou diretamente no controle Data control configurando as propriedades : DatabaseName , RecordsetType e RecordSource conforme abaixo:

Private Sub Form_Load()
Data1.DatabaseName = App.Path & "\tdbgdemo.mdb"
Data1.RecordsetType = 1
Data1.RecordSource = "composer"
End Sub
			

Você é quem escolhe , mas via código a aplicação fica menos 'engessada'. Agora só falta vincular o grid ao controle Data Control . Faça isso na definindo a propriedade DataSource do DBGrid igual a Data1.

Agora é só pressionar F5 e rodar o projeto :

Realmente nada muito útil ... vamos mostrar agora algo mais interessante...

2- Vinculando dois controles DGBrid e exibindo registros relacionados

Eu vou mostrar agora algo mais interessante. Suponha que você tenha num banco de dados duas tabelas relacionadas : Uma tabela com dados de compositores famosos e outra com as suas músicas , a estrutura das tabelas é :

A idéia é a seguinte:

compositor = Data1.Recordset("Sobrenome")
Data2.RecordSource = "SELECT * FROM Musicas WHERE Sobrenome = " _
& Chr$(34) & compositor & Chr$(34)

Ou seja , eu obtenho o Sobrenome do compositor e armazeno na variável compositor , depois selecionas as músicas deste compositor na tabela Musicas via consulta SQL e atribuo a consulta ao RecordSource do controle Data2.

Dim bk1 As String
Dim bk2 As String
Dim compositor As String

bk1 = LastRow
bk2 = DBGrid1.Bookmark

' Para comparar bookmarks você deve convertê-los para string
' LastRow é o bookmark da linha antes do evento RowColChange acontecer
If bk1 <> bk2 Then

- O layout do formulário com os dois controles Data Control e os dois controles DBGrid é o seguinte:

Ao rodar o projeto so dados serão exibidos e se você mudar a linha no DBGrid1 dos compositores as músicas do mesmo irão ser exibidas no DBGrid2

3- DBGrid e DBList gerenciando dados

Agora para terminar vou mostrar a utilização do controle DBGrid e DBList exibindo , atualizando e incluindo dados na tabela clientes do banco de dados tdbgdemo.mdb.

- Inicie o Visual Basic e no inclua no formulário padrão - form1 - um controle Data Control - Data1 e outro controle DBgrid - DBGrid1 , um controle DBList e alguns controles TextBox e Label conforme abaixo :

- Primeiro vincule o controle Data Control - Data1 - ao banco de dados tdbgdemo.mdb através da propriedade DataBaseName e defininindo o RecordsetType igual a dynaset e RecordSource igual a Cliente (a tabela)

- A seguir vamos vincular o controle Data Control - Data1 - ao controle DBGrid definindo a propriedade DataSource do DBGrid igual a Data1.

- Agora vamos vincular o controle DBList ao controle Data1 de definindo a propriedade DataSource do controle DBlist igual a Data1. Além disto temos que definir as propriedades : BouncColumn , DataField , ListField igual a Sobrenome , pois vamos exibir os Sobrenomes dos cliente

- Agora para poder exibir os registros nas caixas de texto : Text1 , Text2 e Text3 , vamos definir a propriedade DataSource de todos as caixas de texto igual a Data1 (o controle de dados). Depois vamos definir a propriedade DataField de cada TextBox assim :

Agora para dar vida ao projeto vamos incluir código para cada um dos botões de comando:

Botão Atualizar

Private Sub Command1_Click()
' Atualizando o DBGrid
' o pequeno ícone do lapis mostra que o registro esta sendo
' atualizado

Data1.Recordset.Edit
Data1.Recordset.Update
DBGrid1.SetFocus

End Sub

Botão Excluir

Private Sub Command2_Click()
'
ao excluir o registro atual o ponteiro fica no registro deletado
' Usamos o MoveNext para mover o registro atual para a linha seguinte ao registro excluido

Data1.Recordset.Delete
Data1.Recordset.MoveNext

' se o ultimo registro for excluido move para o registro anterior
If Data1.Recordset.EOF = True Then
Data1.Recordset.MovePrevious
End If
DBGrid1.SetFocus
End Sub

Botão Incluir

Private Sub Command3_Click()
'
Ao incluir o cursor move-se para um linha em branco
' preparando para incluir um novo registro


' move-se para o ultimo registro
Data1.Recordset.MoveLast

' move o cursor para linha incluida
DBGrid1.Row = DBGrid1.Row + 1
DBGrid1.SetFocus
End Sub

Botão Primeiro

Private Sub Command4_Click()
' vai para o proximo registro
Data1.Recordset.MoveFirst
DBGrid1.SetFocus
End Sub

Botão Próximo

Private Sub Command5_Click()
Data1.Recordset.MoveNext

' nao permite que o registro atual fique na posição invalida EOF
If Data1.Recordset.EOF = True Then
Data1.Recordset.MovePrevious
End If

DBGrid1.SetFocus
End Sub

Botão Anterior

Private Sub Command6_Click()
Data1.Recordset.MovePrevious

'nao permite que o registro atual fique na posição invalida BOF
If Data1.Recordset.BOF = True Then
Data1.Recordset.MoveNext
End If

DBGrid1.SetFocus
End Sub

Botão ùltimo

Private Sub Command7_Click()
Data1.Recordset.MoveLast
DBGrid1.SetFocus
End Sub

Agora basta executar o projeto e usar...

E por hoje é só, aguarde em breve mais artigos sobre o DBgrid ...


José Carlos Macoratti