Desenvolvimento - Visual Basic

Utilizando os objetos de Controle Vinculados da ADO

Com a versão 6.0 o Visual Basic ganhou controles vinculados mais especializados e mais flexíveis, são eles: DataGrid, DataList e DataCombo. Estes controles fazem uso da ADO Data Control e usam a ADO para se conectar a uma base de dados, isto o tornam uma melhor opção ao Data Control.

por José Carlos Macoratti



O Visual Basic até a sua versão 5.0 trazia o controle vinculado , Data Control, que permitia o acesso a uma base de dados de maneira automática ,e quase sem nenhum código. Deixando de lados suas limitações o Data Control permite uma maneira simples de acesso e visualização de um conjunto de registros.

Com a versão 6.0 o Visual Basic ganhou controles vinculados mais especializados e mais flexíveis, são eles: DataGrid, DataList e DataCombo. Estes controles fazem uso da ADO Data Control e usam a ADO para se conectar a uma base de dados , isto o tornam uma melhor opção ao Data Control.

Observação Importante : Os controles DataGrid , DataList , DataCombo e ADO Data Control são controles vinculados da ADO e não podem ser usados com os controles DBGrid , DBCombo, DBList e o Data Control da DAO. Assim você pode usar um DataGrid com ou sem um ADO Data Control , mas , não pode usá-lo com o Data Control da DAO. Ou seja você não pode misturar os controles. Esta regra vale para os demais controles vinculados da ADO.

A primeira coisa a fazer para podermos usar estes controles é, após iniciar um novo projeto no Visual Basic , acionar a opção Project-Components... . Na janela que surge marque as opções como indicadas na figura 1.0. Após isto os controles estarão disponíveis na barra de ferramentas ( figura 2.0)


Figura 1.0 - Incluindo os controles Vinculados na Barra de Ferramentas


Fig 2.0 - Os controles adicionados

ADO Data Control

O ADO Data Control é usado para o acesso a base de dados pois possue os métodos que realizam quase todas as operações sem ser necessário portanto programação. Vamos acessar a base de dados BiBlio.mdb e fazer a ligação de um formulário com os campos da tabela Authors.

1 - Inicie um novo projeto no Visual Basic e adicione a caixa de ferramentas o controle ADO Data Control 6.0 , como indicado anteriormente.

2 - Clique duas vezes sobre o ícone do ADO Data control ou o arraste para o formulário do projeto inicial.

Na figura abaixo temos o resultado, onde o controle aparece no formulário pronto para ser configurado.

Altere o nome do controle para adodc_teste .


Fig 3.0 - Objeto ADO DC

3 - Vamos configurar o controle para que ele acesse a base de dados que desejamos e nos permita a conexão com a tabela Authors do banco de dados Biblio.mdb. Clique sobre o controle ADO Data control com o botão direito do mouse e selecione a opção ADODC Properties. (Figura 4.0). A tela mostrada na figura 5.0 irá surgir.


Fig 4.0


Fig 5.0 - Clique no botão Build para construir uma conexão

4 - Agora clique no botão Build... e selecione o provedor: Microsoft Jet 3.51 OLE DB Provider (Figura 6.0). A seguir clique em Avançar... para que a tela da figura 7.0 seja exibida.


Fig 6.0 Lista de Provedores disponíveis


Fig 7.0 - Seleção do nome do banco de dados5 - Clique no botão para inserir o nome do banco de dados. A tela da figura 8.0 selecione o banco de dados o qual deseja acessar. Iremos selecionar Biblio.mdb e clicar no botão Abrir.


Fig 8.0 - Caixa de dialogo para selecionar a base de dados

6 - Clique em OK e selecione a aba RecordSource (Figura 9.0) . Nela escolha adCmdTable e o nome da tabela, Authors para o nosso caso. Pronto estamos prontos para faze a vinculação do formulário com os dados da tabela.


Fig 9.0 - O tipo de Cursor usado e o nome da tabela

Vinculando o ADO Data Control a uma fonte de dados

Vamos vincular o ADO Data Control com os dados da tabela Authors. Para isto vamos incluir no formulário usado três controles TextBox , obtendo algo parecido com a figura abaixo:

As propriedades do ADO Data Control mais importantes são:

  1. Align - Determina onde o controle será disposto.
  2. Caption - O título que aparece no controle ( adodc_teste )
  3. CommandType - Define a origem do recordset ( tabela ou consulta)
  4. ConnectionString - Contém a informação usada para estabelecer a conexão com a base de dados.
  5. EditMode - Indica o estado de edição para o registro atual.
  6. LockType - Indica o tipo do bloqueio usado durante a edição ( o padrão é somente-leitura)
  7. Recordset - Define o conjunto de registros determinado pelas propriedades ConnectionString e RecordSource.
  8. RecordSource - Determina a fonte de dados a qual o controle está vinculado.
  9. Visible - define se o controle será visível ou não em tempo de execução.

Já deu para perceber que o ADO Data Control precisa de outros controles para que possamos efetivamente ter acesso aos dados. Esses controles são chamados de controles vinculados , pois permitem através de determinadas propriedades a vinculação com um ADO Data Control. Os principais controles vinculados são:

  • Label
  • Text Box
  • Check Box
  • Picture Box
  • Image Box
  • DataGrid,DataList,DataCombo, DbGrid , DbCombo, DbList

Para estabelecer a conexão entre estes controles e a base de dados vamos precisar configurar as seguintes propriedades:

  • DataField - Especifica o nome do campo na fonte de dados que esta vinculada ao controle
  • DataSource - Define o ADO Data Control que está vinculado ao controle.

Vamos então configurar estas propriedades para o nosso exemplo. Voltemos ao formulário onde já incluimos as caixas de texto. Selecione a primeira caixa de texto - Text1 - e em propriedades clique em DataSource - o nome do controle Adodc_teste aparece e deve ser selecionado. A seguir clique em DataField , perceba que os campos da tabela Authors surgem na caixa de seleção , selecione o primeiro campo - Au_Id. Desta forma configuramos a primeira caixa de texto para mostrar o campo Au_ID da tabela Authors que esta vinculada ao ADO Data Control - adodc_teste. As figuras abaixo mostram a sequência da configuração realizada.

Configuração de Text1

Agora basta repetir a sequência para os demais TextBox - text2 e text3 - alterando somente o nome do campo a ser visualizado. Ao término da configuração devemos ter os seguintes valores:

Text1 - DataSource - Adodc_teste DataField - Au_ID
Text2 - DataSource - Adodc_teste DataField - Author
Text3 - DataSource - Adodc_teste DataField - Year Born

Vamos ver se funciona ! Rode o projeto , e veja se você obteve o formulário com os dados da figura abaixo:(eu me desloquei ate um autor que tivesse a data do nascimento gravada no arquivo)

Nada Mal !!! Simples não ? Agora basta você generalizar para o teu caso especifico. Mas não abuse dos controles vinculados , pois embora sejam simples de usar pagamos um preço por isso - performance.

Se você é daqueles que gosta de codificar tudo , então fique sabendo poderiamos obter o mesmo resultado sem ter que clicar aqui e ali . Poderiamos codificar tudo configurando as seguinte propriedades: ConnectionString, RecordSource, DataSource, Datafield , quer ver ? então lá vai:

Private Sub Form_Load()
  With Adodc1
    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\teste\biblio.mdb;"
    .RecordSource = "Select * from Authors"
  End With
  Set Text1.DataSource = Adodc1
  Text1.DataField = "Au_ID"
  Set Text2.DataSource = Adodc1
  Text2.DataField = "Author"
  Set Text3.DataSource = Adodc1
  Text3.DataField = "Year born"
End Sub

É obvio que o formulário deverá conter o controle ADO Data Control e as caixas de texto.Os Eventos do ADO Data Control

O ADO Data Control possui diversos eventos com os quais podemos interagir. Vejamos os principais eventos e quando eles ocorrem:

Um exemplo de utilização dos eventos acima pode ser observado nas linhas de código abaixo: Aqui o ADO data control foi nomeado como datPrimaryRS

1 - Usando o evento MoveComplete para mostrar a posição do registro no Recordset

Private Sub datPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal _
pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
  "Mostra a posição atual do registro no recordset
  datPrimaryRS.Caption = "Record: " & CStr(datPrimaryRS.Recordset.AbsolutePosition)
End Sub

2 - Usando o evento WillChangeRecord para validar dados

Private Sub datPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal_
cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
  "Codigo para validação
  "Este evento ocorre com as seguintes ações
  "Em cada uma dela podemos usar código para validar/verificar os dados  
Dim bCancel As Boolean

  Select Case adReason
  Case adRsnAddNew
  Case adRsnClose
  Case adRsnDelete
  Case adRsnFirstChange
  Case adRsnMove
  Case adRsnRequery
  Case adRsnResynch
  Case adRsnUndoAddNew
  Case adRsnUndoDelete
  Case adRsnUndoUpdate
  Case adRsnUpdate
  End Select

  If bCancel Then adStatus = adStatusCancel
End Sub

Usando o ADO Data Environment

Vamos fazer um aparte nesta altura , para mostrar o uso do ADO Data Environment. No exemplo a seguir iremos fazer uma conexão (Connection Object) com o banco de dados Biblio.mdb e usar um objeto Command com a tabela Titles.

1 - Inicie um novo projeto e adicione um Data Environment ao seu projeto. O seu projeto deverá estar como a figura abaixo. Altere o nome de DataEnvironment para denbooks e de Connection1 para conbooks. O resultado é mostrado na figura abaixo a direita.


Incluindo um DataEnvironment


Renomeando o DataEnvironment e Connection

2 - Vamos agora instituir uma conexão via Objeto Connection:

  • Clique com o botão direito do mouse na conexão conbooks e selecione Propriedades(Properties). Na janela que surge escolha o Provedor , no nosso caso selecione Microsoft Jet 3.51 OLE DB Provider , pois iremos acessar uma base de dados access.
  • Clique no botão Avançar (Next) para ir para janela de Conexão. Clique no botão para selecionar a base de dados e selecione o arquivo Biblio.mdb. Teste se a conexão esta correta. E clique no botão OK.

3 - Vamos criar um comando via objeto Command

  • Na janela Data Environment , clique com o botão direito do mouse sobre a conexão conbooks , e, no menu que surge selecione a opção Add Command. Acabamos de criar um comando chamado Command1.
  • Agora clique com o botão direito do mouse sobre Command1 e selecione Propriedades. Na janela Propriedades de Command1 , altera o nome do commando para ComTitles. Na opção Source of Data , selecione Table em DatabaseObject e Titles em Object Name. Veja na figura 1.0 o resultado final e a expansão do comando criado na figura 2.0.


Figura 1.0 - criando um comando conbooks com Titles


Figura 2.0 - O objeto ComTitles Criado mostrando os campos da tabela Titles.Acabamos de configurar o DataEnvironment e estamos pronto para acessar a tabela Titles na base de dados Biblio.mdb. Agora clique no comando Comtitles e arraste-o para o formulário e solte-o. Veja o resultado , na figura 3.0.


Figura 3.0 - Formulário com os dados da tabela Titles


Fig 4.0 - Propriedades configuradas das caixas de texto vinculadas aos dados

Se voce clicar em qualquer das caixas de texto vinculadas aos campos e observar notará que as propriedades envolvidas são:

  • DataField - Especifica o nome de um campo na tabela do vinculada ao objeto command
  • DataMember - Informa o nome do objeto Command vinculado a tabela do arquivo
  • DataSource - Determina a qual Data Environment o controle esta vinculado
Se voce rodar o projeto verá os dados sendo mostrados nos campos do formulário. Mas como faço para me movimentar pelos registros ? Vamos mostrar como ir para frente e para trás , o resto fica por sua conta. OK ?

Adicione dois botões de comando ao formulário , e chame um de próximo e outro de anterior. No evento click dos botões acrescente o código a seguir:

1 - Botão de comando Anterior:

Private Sub Command1_Click()
 denbooks.rscomtitles.MovePrevious
 if denbooks.rscomtitles.bof then
    denbooks.rscomtitles.movefirst
 endif
End Sub

2 - Botão de comando Próximo:

Private Sub Command2_Click()
 denbooks.rscomtitles.MoveNext
 if denbooks.rscomtitles.eof then
    denbooks.rscomtitles.movelast
 endif
End Sub

Se você for um pouco observador irá me perguntar: "Hein de onde você tirou o recordset rscomtitles?"

Acontece que quando configurado o Data Environment retorna um Recordset que possui as mesmas propriedades e métodos do ADO data control.. Um Recordset é retornado para cada objeto Command criado no Data Environment . O nome é baseado no nome dado ao objeto Command acrescido do prefixo rs, assim o objeto Command comtitles gerou o Recordset rscomtitles. Para ler ou determinar a propriedade de Recordset em um Data Environment (denteste) no qual criamos um objeto Command chamado comteste você deve usar a seguinte sintaxe:

denTeste.rscomTeste.nome_da_propriedade

O formulário do projeto tem o seguinte aspecto:


Exemplo de conexão com o Data Environment

Usando o DataGrid

O controle DataGrid é muito usado para visualizar o conteúdo de Recordsets, Tabelas e Consultas no formato de uma planilha , uma grade, onde as colunas representam os campos e as linhas os registros.

Para poder utilizar o controle DataGrid em seu projeto você vai precisar adicioná-lo na barra de ferramentas e inserí-lo no seu projeto como indicado no inicio deste artigo.

Inicie o Visual Basic e arraste os controles DataGrid e ADO Data Control para o seu formulário. A seguir faça uma conexão usando o ADO Data Control com a base de dados com qual quer trabalhar , nosso exemplo usará a base de dados cadastro.mdb. Vincule o ADO Data Control à tabela ou Recordset que possui os dados que deseja visualizar. Nosso exemplo usará uma instrução SQL para extrair os campos Nome, Endereço, Estado e Cep da tabela Clientes e visualizá-los no DataGrid. Veja abaixo :


Os controles Data Grid e ADO data Control no formulário


Instrução SQL para retornar campos da tabela Clientes

Agora basta você configurar a propriedade DataSource do DataGrid informando o nome do controle vinculado - Adodc1. Pronto pode executar o projeto , e se tudo foi feito corretamente você irá obter o resultado como a seguir:


Projeto em tempo de execução

A propriedade DataSource do DataGrid foi definida como: DataSource = Adodc1

Para poder trabalhar com o DataGrid, alterando, excluindo e incluindo dados você deverá configurar as propriedades:

  1. AllowAddNew = True (permite inclusão)
  2. AllowDelete = True (permite exclusão)
  3. AllowUpdate = True (permite atualização)

Iremos abordar o assunto em um outro artigo, bye, bye... ;-)

José Carlos Macoratti

José Carlos Macoratti