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