Ado no VB.

Propaganda
ADO - Básico e Prático I
I - Introdução
Nosso objetivo neste artigo é ajudar quem esta iniciando agora com a linguagem Visual Basic
, quer trabalhar com banco de dados , pegou a migração DAO -> ADO -> VB.Net , e esta
confuso quanto a por onde começar.
Vamos mostrar os conceitos básico para acessar um banco de dados Access com ADO
usando os controles vinculados ADO data Control, DataList , DataCombo, DataGrid, etc....
Ao trabalho...
II - Criando um Banco de Dados com ADO
Para criar um banco de dados você vai ter que usar a ADOX ( leia : ADOX - Gerenciando seu
banco de dados ). A primeira coisa a fazer é referenciar no seu projeto a biblioteca :
Microsoft ADO Ext. 2.X for DDL and Security além de referenciar a biblioteca :
Microsoft ActiveX Data Objects 2.X Library.
Abaixo temos o código que cria o banco de dados DbAdo1.mdb e a tabela TblAdoIni com
os seguintes campos:



Nome
- Tipo Texto
Nascimento - Tipo Data
Telefone
- Tipo Texto
Dim dbNome As String
Dim tbnome As String
dbNome = "c:\teste\DbAdo1.mdb"
tbnome = "TblAdoIni"
If Dir(dbNome) = "" Then
Dim cn$
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
Novo = True
cn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & dbNome & ";"
cat.Create cn
With tbl
.Name = tbnome
'Campo tipo texto
.Columns.Append "Nome", adVarWChar
.Columns!Nome.Attributes = adColNullable
'campo tipo data
.Columns.Append "Nascimento", adDate
.Columns!Nascimento.Attributes = adColNullable
'Campo tipo texto
.Columns.Append "Telefone", adVarWChar
.Columns!Telefone.Attributes = adColNullable
End With
cat.Tables.Append tbl
Set tbl = Nothing
Set cat = Nothing
End If
With Data1
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbNome & ";Persist Security
Info=False"
.RecordSource = "SELECT * FROM " & tbnome
.Refresh
End With
Text1.DataField = "Name"
With MaskEdBox1
.DataField = "Nascimento"
.Format = "mm/dd/yy"
.Mask = "##/##/##"
.MaxLength = 8
End With
'define o campo vinculado
'define o campo vinculado
With MaskEdBox2
.DataField = "Telefone"
'define o campo vinculado
.Mask = "(###) ###-####"
.MaxLength = 14
End With
Primeiro verificamos se o arquivo "c:\teste\DbAdo1.mdb" existe. Se o arquivo não existir
criamos o banco e dados e a tabela com os campos já comentados.
A seguir criamos uma string de conexão para o banco de dados criado selecionado todos os
registros da tabela.
Para exibir os dados em um formulário optamos por usar o controle ADO Data Control (
Data1 ) e usamos uma caixa de texto (Text1) para exibir o nome , uma maskEdBox para
exibir a data de nascimento e outra para exibir o telefone.
Observe que configuramos as propriedades dos controles via código, definindo o campo
vinculado (DataField) e no caso das MaskEdBox as máscaras para exibir os dados.
O resultado final seria o seguinte formulário sendo exibido:
Aqui apenas mostrei o código para criar o banco de
dados e para exibir o formulário com o controle
ADO Data Control.
III - Usando DataCombo e DataList - Exibindo dados de tabelas relacionadas
Os controles vinculados sempre foram olhados com desconfiança quando do
desenvolvimento de aplicações comerciais devido a suas limitações e a sua performance.
Com o advento da ADO chegaram também os novos controles vinculados , que , se não
beiram a perfeição melhoraram muito em relação aos utilizados com a ADO.
Eu não estou fazendo apologia dos controles vinculados , apenas digo que , dependendo da
ocasião , por que não usá-los ? Se isto for facilitar nosso trabalho...
Os controles DataCombo e DataList estão presentes na ocx MsDatlst.ocx(232.640 Kb).
Quando usamos estes controles trabalhamos basicamente com as propriedades
DataSource/DataField e RowSource/ListField onde:
DataSource e DataField governam o valor ativo do controle de dados vinculados e
RowSource e ListField permitem exibir os dados do registro atual.
Neste exemplo estaremos usando estes dois controles vinculados - DataCombo e DataList ,
além do ADO Data Control. Vamos exibir em um DataList os nomes dos produtos
relacionados com a categoria selecionada em um controle DataCombo. Vamos ao problema:
a-) Temos a tabela Categorias do banco de dados Northwind com a seguinte estrutura:
b-) Temos também a tabela Produtos do banco de dados Northwind com a seguinte
estrutura:
3-) O relacionamento entre as duas tabelas é o seguinte:
Queremos então exibir o nome das categorias em um DataCombo e conforme
selecionarmos uma categoria , os produtos a ela relacionados deverão ser exibidos em um
DataList.
Isto vai ser possível graças ao relacionamento entre as duas tabelas ter sido feito pelo
campo CódigoDaCategoria. Percebeu então que muitas vezes não só o código que torna
possível realizar certas tarefas mas , no caso de aplicações para banco de dados , uma
definição e normalização adequada das tabelas de dados envolvidos no processo. Ninguém
faz milagre... Agora siga o roteiro passo a passo:





Inicie um novo projeto no VB
Inclua os seguintes componentes ao seu projeto: Meu Project|Components...
o Microsoft ADO Data control 6.0
o Microsoft DataList Controls 6.0
Insira um controle DataCombo e um controle DataList ao seu projeto
Insira também dois controles ADO Data Control ao seu projeto
Veja abaixo o formulário com os controles já inseridos:
O controle Adodc1 será vinculado ao
controle DataCombo1
-
- O controle Adodc2 será vinculado ao
controle DataList1
- adodc1 e adodc2 estarão conectados com o
banco de dados Northwind
Agora vamos configurar os controles :
1-) Precisamos conectar o controle adodc1 ao banco de dados Northwind e a tabela
Categorias , pois desejamos exibir no controle DataCombo1 o nome das categorias
existentes na tabela categorias. Vejamos como fazer isto:
a- Selecione o controle adodc1 e clique com o botão direto do mouse ou na janela
Properties clique em Custom
b- Na janela Property Pages clique no botão Build e na janela Data Link Properties selecione
o provedor para acessar o banco de dados - Microsoft Jet 4.0 OLE DB Provider. Ver abaixo:
c- A seguir clique no botão Next>> ,e , na aba Connection , selecione o banco de dados , no
nosso caso : Northwind.mdb :
d- Após isto clique no botão OK e , na janela Properties Pages , clique no botão Aplicar e
selecione a aba Recordsource. Em Command Type selecione : 2- adCmdTable e em Table
or Stored Procedures Name selecione a tabela categorias. (Veja abaixo)
e- Pronto , clique em OK e seu controle adodc1 já esta configurado para acessar o banco de
dados Northwind e a tabela Categorias usando o provedor OLE DB 4.0.
Vamos agora vincular o controle adodc1 ao controle DataCombo1 para pode exibir o nome
das categorias neste controle: Faça assim:
Vinculando o DataList ao controle adodc1
- Defina a propriedade RowSource = Data1
- Defina a propriedade ListField =
NomedaCategoria
- Limpe a propriedade Text do controle
DataList
Pronto , se você executar o projeto agora
verá que o controle DataCombo1 irá exibir o
nome das categorias existentes na tabela
Categorias
Falta configurar o controle DataList1 para que conforme selecionarmos uma categoria em
DataCombo1 os nomes dos produtos desta categoria sejam exibidos. Vamos lá:
2-) Primeiro vamos configurar o controle adodc2 para se conectar ao banco de dados
Northwind. Basta repetir os mesmos procedimentos adotados para o controle adodc1 até o
passo c.
A única diferença estará no passo d , onde informamos a tabela a qual o controle estará
vinculado. Para adodc2 não iremos vincular tabela alguma , apenas iremos definir um
recordset que NÃO retorne nenhum registro através da instrução SQL - Select * From
Produtos Where NomedoProduto="" . (Ver figura abaixo)
- Configuração do controle adodc2
- Não vinculamos nenhuma tabela ao controle
, apenas definimos um recordset que não
retorna registro algum.
Agora basta vincular o controle adodc2 ao controle DataList. Assim:
Vinculando o controle DataList ao
controle adodc2:
- Defina a propriedade RowSource = adodc2
- Defina a propriedade ListField =
NomedoProduto
Para terminar devemos incluir algumas linhas de código para que quando uma categoria for
selecionada em DataCombo1 os nomes dos produtos relacionados sejam exibidos em
DataList1.
Vamos usar o evento Change do controle DataCombo1 , de forma que , toda vez que o
houve uma mudança em DataCombo1, isto se reflita em DataList1.
Ora para fazer isto basta que a cada alteração a propriedade Recordsource do controle
adodc2 seja alterada através de uma instrução SQL que selecione da tabela Produtos os
nomes do produtos para a categoria selecionada em DataCombo1. A propriedade Text do
controle DataCombo1, será então usada para informar o nome da categoria selecionada e
assim montar a instrução SQL . Veja a seguir o código:
Private Sub Datacombo1_Change()
Dim sql As String
sql = "SELECT * FROM Produtos WHERE CódigodaCategoria = " & _
"(SELECT CódigodaCategoria FROM Categorias " & _
"WHERE NomedaCategoria = '" & DataCombo1.Text & "')"
Adodc2.RecordSource = sql
Adodc2.Refresh
End Sub
Agora é só executar e ver o resultado :
Deu para perceber as possibilidades de uso destes controles ???? Você pode exibir dados de
várias tabelas relacionadas sem usar qualquer linha de código apenas vinculados os
controles , se as tabelas estiverem corretamente normalizadas , é claro...
Com prática dá fazer tudo isto em uns 4 minutos...
IV - Usando DataGrid
O controle DataGrid permite exibir várias linhas e colunas de dados , como uma planilha
eletrônica , dando assim uma visão geral das informações. Para preencher um DataGrid
basta definir a sua propriedade DataSource para a fonte de dados que desejar exibir ; além
disto o DataGrid permite alterar, excluir e incluir colunas. As mudanças na exibição dos dado
podem se conseguidas alterando a propriedade DataSource usando uma instrução SQL.
O controle DataGrid esta presente na ocx MsdatGrd.ocx. ( 262.328 Kb ).
Geralmente o controle DataGrid esta vinculado a um controle Ado Data control . Vamos
mostrar a utilização do controle DataGrid para exibir os dados da tabela Produtos do banco
de dados NorthWind. Para isto iremos fazer a conexão do controle adodc1 ao banco de
dados Northwind e definir sua propriedade RecordSource usando a instrução SQL para
selecionar todos os registros da tabela produtos - Select * from produtos. Depois basta
vincular o controle DataGrid1 ao controle adodc1 através da propriedade
DataSource=adodc1.
Obs: O DataGrid apresentava alguns bugs que foram resolvidos a partir do serviço SP3.
1-) Inicie um novo projeto no Visual Basic e inclua os componentes, abaixo , através do
menu Project|Components...


Microsoft ADO Data Control 6.0
Microsoft DataGrid Control 6.0
2-) Agora vamos conectar o controle adodc1 ao banco de dados Northwind e definir o
Recordset:

a- Selecione o controle adodc1 e clique com o botão direto do mouse ou na
janela Properties clique em Custom
b- Na janela Property Pages clique no botão Build e na janela Data Link Properties
selecione o provedor para acessar o banco de dados - Microsoft Jet 4.0 OLE DB
Provider. Ver abaixo:
c- A seguir clique no botão Next>> ,e , na aba Connection , selecione o banco de
dados , no nosso caso : Northwind.mdb :
d- Após isto clique no botão OK e , na janela Properties Pages , clique no botão
Aplicar e selecione a aba Recordsource. Em Command Type selecione : 2adCmdText e em Table or Stored Procedures Name - Digite a instrução SQL - Select
* From Produtos. (Veja abaixo)
3-) Vamos agora vincular o controle DataGrid1 ao controle adodc1 . Para isto basta definir
a propriedade DataSource = adodc1.
Se você rodar o projeto agora irá obter o seguinte:
Muito bem ! O Grid esta exibindo todos os registros da tabela Produtos. Mas , e se você não
quiser exibir todas as colunas ? Vai ter que configurar o controle . Vamos supor que você
queira exibir somente as colunas : CódigodoProduto , NomedoProduto e PreçoUnitário. Como
vai fazer isto ? Ora , siga-me...:
1.
2.
3.
4.
5.
6.
7.
Clique com o botão direito do mouse sobre o controle DataGrid1 e no menu suspenso selecione
a opção : Retrieve Fields
Na janela com a mensagem : Replace existing grid layout with new field definitions ? - clique
me SIM.
O seu grid vai exibir o nome de todas as colunas da tabela
Clique agora com o botão direito do mouse sobre o datagrid1 e selecione a opção : Edit.
Para remover colunas clique sobre elas com o botão direito do mouse e selecione : Delete
Você pode também ajustar as colunas e incluir novas colunas ( Insert )
Para alterar o nome do titulo de uma coluna clique sobre o Grid e selecione a opção
Properties. A seguir selecione a aba Columns . Agora é só alterar a propriedade Caption da
coluna. Ver figura.
Veja como ficou o nosso projeto após as mudanças:
Muito bem !!! E se agora você quiser formatar os dados exibidos ? Vamos supor que você
queira formatar a exibição do campo Código de forma a exibir o código do produto no
formato - P00X e o Preço do produto no formato R$ 99,99 ?
Para formatar a coluna Preço basta clicar com o botão direito do mouse sobre o Grid e na
janela Property Pages selecionar a aba Format. Selecione a coluna que deseja formatar e
escolha a formatação. Veja figura abaixo:
Vamos mostrar agora como formatar a coluna Código via código. Para isto usamos a
propriedade NumberFormat do DataGrid. A formatação somente altera a exibição dos
dados na coluna não afetando os dados em si. Veja o código abaixo:
Private Sub Form_Load()
DataGrid1.Columns("Código").NumberFormat = "P-000"
DataGrid1.Columns("Preço").Alignment = dbgRight
End Sub
Note que também alinhamos a coluna Preço a direita usando a propriedade Alignment. Veja
o resultado abaixo:
Se você quiser obter os valores da coluna onde o usuário clicar basta usar o evento
RowColChange . Abaixo temos o código que exibe o texto da coluna , o número da linha e
da coluna clicada pelo usuário:
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As
Integer)
MsgBox DataGrid1.Text & " - " & DataGrid1.Row & " - " & DataGrid1.Col
End Sub
Para obter os valores formatados pela propriedade FormatNumber você pode usar o
métodos CellText ( o mesmo resultado é obtido usando a propriedade Text . Ex:
DataGrid1.Text). Assim para obter o valor formatado da coluna Preço temos:
DataGrid1.Columns("Preço").CellText(DataGrid1.Bookmark)
Observe que usamos , neste caso , a propriedade BooKmark.
Já se você quiser retornar o valor que esta no banco de dados , independente da
formatação , deve usar o método CellValue. Assim :
DataGrid1.Columns("Preço").CellValue(DataGrid1.Bookmark)
Ambos deverão ser usados no evento RowColChange.
Novamente eu repito as possibilidades são imensas... Cabe a você se aprofundar...e
batalhar...
V - ADO - Trabalhando com Imagens
Como tratar imagens em banco de dados com ADO ? Vamos mostrar como fazer isto usando
o ADO Data Control.
Existem duas maneiras básicas de trabalhar com imagens em banco de dados :
1.
2.
Você salva no arquivo a localização da imagem e a carrega toda vez que quer exibí-la.
Você salva a imagem diretamente no seu banco de dados.
Já vou adiantar que você não pode salvar um arquivo imagem apenas atribuindo o nome da
imagem ao campo e usando o comando Update. Um arquivo imagem geralmente é um
arquivo do tipo binário que precisa ser tratado antes de ser gravado. Para fazer isto usamos
o método AppendChunck() da ADO. Vejamos como fazer:
1-) Inicie um novo projeto no Visual Basic e insira no formulário os seguintes controles :
a.
b.
c.
d.
e.
Uma referência a livraria : Microsoft ADO Ext. 2.X for DDL and Security
Um controle Image - Image1
Um controle ADO Data Control ( faça a referência ao componente antes )
Um botão de comando
Um controle CommonDialog - Microsoft Common Dialog Control 6.0. Veja abaixo o formulário:
Agora vamos definir a propriedade DataSource do controle image1 e do controle text1
como sendo igual ao controle Adodc1.
Após isto insira o seguinte código no formulário:
1- Código do evento Load do formulário :
Private Sub Form_Load()
Dim dbNome$, tbNome$
dbNome = "c:\teste\DBImg.mdb"
tbNome = "Imagens"
If Dir(dbNome) = "" Then
Dim cn$
Dim cat As New ADOX.Catalog
Dim tImagens As New ADOX.Table
cn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & dbNome & ";"
cat.Create cn
With tImagens
.Name = tbNome
.Columns.Append "Nome", adVarWChar
.Columns!Nome.Attributes = adColNullable
.Columns.Append "Imagem", adLongVarBinary
End With
cat.Tables.Append tImagens
Set tImagens = Nothing
Set cat = Nothing
End If
With Adodc1
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbNome & ";Persist Security
Info=False"
.RecordSource = "SELECT * FROM " & tbNome
.Refresh
End With
'vinculando os controles text1 e image1 ao adodc1
Text1.DataField = "Nome"
Command1.Caption = "&Incluir Imagem"
Image1.DataField = "Imagem"
End Sub
Neste código estamos criando o banco de dados - DBImg.mdb , se o mesmo ainda não
existir, e a tabela Imagens com a seguinte estrutura:
1.
2.
Nome
Imagem
- Tipo Texto
- Tipo Binário Longo
Após criar o banco de dados e a tabela , criamos uma conexão com o banco de dados e
definimos o recordset atual como sendo igual a todos os registros da tabela. ("SELECT *
FROM " & tbNome )
2-) Código do evento Click do botão de comando - command1:
Private Sub Command1_Click()
Dim f as String
Dim L as String
dim Imagem as String
On Error GoTo trata_erro
With CommonDialog1
.CancelError = True
.Filter = FLTR
.ShowOpen
Imagem$ = .FileName
End With
f = FreeFile
Open Imagem For Binary Access Read As f
L = LOF(f)
ReDim B(L) As Byte
Get f, , B()
Close f
'inclui o registro no banco de dados
With Adodc1.Recordset
.AddNew
!Imagem.AppendChunk B()
!Nome = Imagem
.Update
End With
'mostra imagem no controle image1
Image1.Picture = LoadPicture(Imagem)
Exit Sub
trata_erro:
MsgBox Err.Description
End Sub
Aqui ativamos o controle CommonDialog com a janela Abrir , já filtrando somente arquivos
imagens , graças a constantel: Const FILTRO = "Imagens|*.jpg*;*.gif*;*.bmp;*.ico|All
Files|*.*"
Quando o usuário selecionar uma imagem ativamos a rotina que guarda a imagem no vetor
B() ,e , em seguida gravamos o banco de dados o nome da imagem e a imagem , usando o
método AppenChunck() A imagem é a seguir exibida usando o comando LoadPicture.
Veja a seguir o resultado obtido:
Bem , se você pretende tratar imagens sem usar um ADO Data control , vai precisar da
rotina para ler a imagem do banco de dados e exibí-la . Abaixo temos o código que lê a
imagem do banco de dados para estes casos:
Private Sub LeImagem_Click()
Dim L as string
Dim t as string
dim f as string
L = Adodc1.Recordset!Imagem.ActualSize
ReDim B(L) As Byte
B = Adodc1.Recordset!Imagem.GetChunk(L)
t = "tmp"
f = FreeFile
Open t For Binary Access Write As f
Put f, , B()
Close f
Set Image2.Picture = LoadPicture(t)
End Sub
Obs: Você deve substituir o nome do campo Imagem na rotina quando for adaptar o código
ao seu caso.
Por hoje é só ... Veja continuação no próximo artigo...
Conectando-se e Navegando em um base de dados Access com ADO Data
Control
A maneira mais fácil para se conectar a uma base de dados Access via ADO é utilizar a ADO Data
Control. A sua utilização é idêntica ao DAO Data Control. Vejamos um exemplo passo a passo. Neste
exemplo iremos acessar um banco de dados Access 97 chamado agenda.mdb e exibir os dados da
tabela Clientes.
O que é um banco de dados ?
Uma coleção de dados e objetos relacionados a um determinado tópico ou objetivo. Um banco de dados
do Microsoft Access pode conter tabelas, consultas, formulários, relatórios, macros, módulos e atalhos a
páginas de acesso a dados. O motor de banco de dados Microsoft Jet gerencia os dados das tabelas que
residem no banco de dados. Os dados em tabelas vinculadas podem residir em um outro banco de dados
do Access, em uma Origem do registro externos, como o dBASE ou o Microsoft Excel, ou em uma
Origem do registro ODBC, como o Microsoft SQL Server.
A tabela Clientes possui a seguinte estrutura:
O que é uma tabela ?
Uma tabela é um conjunto de dados sobre um tópico específico, como produtos ou fornecedores. Utilizar
uma tabela separada para cada tópico significa armazenar os dados somente um vez, o que torna o
banco de dados mais eficiente e reduz os erros de entrada de dados.
Este banco de dados foi criado no Access. Para ver como criar uma tabela no Access leia : Usando o
Access para criar um banco de dados e tabelas.
A seguir , veja como criar , passo a passo a aplicação para se conectar com o banco de dados agenda.mdb e
acessar a tabela clientes.
1. Inicie um novo projeto (Standard EXE) no Visual Basic, e mude o nome do projeto para adodc na
caixa de propriedades, renomeie também o nome do formulário para frmMain
2. Na opção do Menu Project | Components, inclua o Microsoft ADO Data Control 6.0 ao projeto.
Inserindo o Componente ADO data Control no projeto
O objeto Adodc na
Barra de
Ferramentas
3. A seguir inclua o ADO Data Control no formulario frmMain e as caixas de texto como mostrada na
figura 1.0 a seguir:
Figura 1.0
Agora configure as propriedades DataSource e DataField das caixas de texto , a propriedade Caption
das labels e as propriedades ConnectionString, Command Type e RecordSource do ADO Data
Control como de acordo com a tabela 1.0.
Table 1.0 Objetos e propriedades para o formulário frmMain.
OBJETO
Propriedade
Valor
Form
Caption
Usando ADO para conexão com banco de dados Access
ADO Data
control
Name
adodc1
Caption
Clientes
Align
2 - vbAlignBottom
ConnectionString Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data
Source=C:\Arquivos de Programas\Microsoft Visual
Studio\VB98\agenda.mdb
TextBox
TextBox
TextBox
TextBox
RecordSource
Clientes
Command Type
adCmdTable
Name
Text1
Text
""
DataSource
adodc1
DataField
Nome
Name
Text2
Text
""
DataSource
adodc1
DataField
Sobrenome
Name
Text3
Text
""
DataSource
adodc1
DataField
Endereço
Name
Text4
Text
""
DataSource
adodc1
DataField
Cidade
TextBox
TextBox
TextBox
Label
Name
Text5
Text
""
DataSource
adodc1
DataField
Estado
Name
Text6
Text
""
DataSource
adodc1
DataField
CEP
Name
Text7
Text
""
DataSource
adodc1
DataField
Telefone
Name
*
Caption
*
(*) - Voce deve inserir 7 etiquetas (labels) em seu projeto e nomear cada uma conforme os nomes
mostrados na figura 1.0. (para fazer isto selecione a label e pressione F4 alterando a propriedade
caption para o nome desejado)
Para configurar as propriedades do ADO data control , clique com o botão direito do mouse sobre o
controle e em propriedades clique na propriedade ConnectionString; a janela da figura 2.0 irá surgir
na tela:
Selecionando a Propriedade
ConnectionString
Figura 2.0
1-) Clique no botão Build... e selecione o provedor: Microsoft Jet 3.51 OLE DB Provider (Figura 3.0).
Clique em Avançar... para que a janela da figura 4.0 seja exibida.
Fig 3.0 Lista de Provedores disponíveis
Fig 4.0 - Seleção do nome do banco de dados
2-) Clique no botão com reticências(...) para inserir o nome do banco de dados. Na
janela da figura 5.0 selecione o banco de dados o qual deseja acessar. Iremos
selecionar Agenda.mdb e clicar no botão Abrir.
Fig 8.0 - Caixa de dialogo para selecionar a base de dados
3-) Clique em OK e selecione a aba RecordSource (Figura 6.0) . Nela escolha
adCmdTable e o nome da tabela, Clientes para o nosso caso. Pronto estamos
prontos para fazer a vinculação do formulário aos dados da tabela.
Fig 6.0 - O tipo de Cursor usado e o nome da tabela para conexão
Para vincular os TextBox aos campos da tabela , clique com o botão direito do mouse sobre cada
TextBox e a seguir configure as propriedades DataSource para Adodc1 e DataField para cada campo
da tabela clientes. Figura 7.0
Vamos vincular cada TextBox a cada campo da tabela para poder
exibí-los. A vinculação deverá ser feita para cada textbox :
- Text1.DataSource = adodc1 e Text1.DataField=Nome
- Text2.DataSource = adodc1 e Text3.DataField=Sobrenome
- Text3.DataSource = adodc1 e Text3.DataField=Endereco
- Text4.DataSource = adodc1 e Text4.DataField=Cidade
- Text5.DataSource = adodc1 e Text5.DataField=Estado
- Text6.DataSource = adodc1 e Text6.DataField=Cep
- Text7.DataSource = adodc1 e Text7.DataField=Teelfone
Figura 7.0 - TextBox - Exemplo de Configuração
As caixas de texto vinculadas ao controle adodc1
Como funciona ?
O Controle ADO Data Control faz todo o serviço sem precisar de uma linha de código sequer, para
movimentar-se pela tabela clientes basta clicar nas setas indicativas do controle ADO Data Control.
Pressione F5 e veja o projeto em tempo de execução: Voce pode navegar pelos registros clicando nos
botôes do controle ADO Data control.
A seguir veremos como editar, incluir , excluir e localizar registros usando o ADO Data control.
José Carlos Macoratti
Incluindo , Excluindo e Localizando dados em uma base de dados Access
via ADO
O Problema
No capítulo anterior vimos como se conectar e navegar através de um base de dados Access. Você deve
ter percebido que embora seja muito simples fazer isto na prática as sua aplicações vão precisar ter
mais recursos.
Vejamos a seguir como incluir , excluir e localizar registros de sua base de dados usando para isto a
ADO Data Control.
Preparando os dados:
Para que tudo funcione bem nesta etapa vamos ter que alterar a estrutura da tabela Clientes. Vamos
incluir um novo campo chamado Codigo que irá servir para atribuir um código único a cada cliente.
Vamos usar esta propriedade para poder localizar cada cliente. Abaixo temos comparadas a estrutura
anterior e a nova:
Perceba que o novo campo possui uma chave Primária e é do tipo Autonumeração , ou seja , a
medida que você inclui dados este campo sofre um incremento a cada registro inserido.
Para especificar o campo chave Primária de uma tabela usamos a propriedade Primary . Um campo de
chave primária contém dados que identificam exclusivamente cada registro em uma tabela.
O que é uma chave primária ?
Um ou mais campos (colunas) cujo valor ou valores identificam de modo exclusivo cada registro de uma tabela.
Uma chave primária não permite valores Nulos e deve sempre ter um índice exclusivo. Uma chave primária é
usada para relacionar uma tabela a chaves estrangeiras em outras tabelas.
No Visual Basic, para acessar a propriedade Primary de um índice, usamos a propriedade PrimaryKey do ADO
(ActiveX Data Objects, objetos de dados ActiveX).
O que é tipo de dados AutoNumeração ?
Um tipo de dados de campo que armazena automaticamente um número exclusivo para cada registro à medida
que este é adicionado à tabela. Três tipos de número podem ser gerados: seqüencial (incremento de 1),
aleatório e Código de Replicação (utilizado pelo Gerenciador de Replicação para garantir a integridade dos
dados em bancos de dados replicados). Os números gerados por um campo AutoNumeração não podem
ser excluídos ou modificados.
Vamos também criar um índice composto para nosso tabela clientes que será composto pelos campos:
Nome e Sobrenome. Abaixo temos os índices existentes na nossa tabela:
O que é um índice ?
Um recurso que acelera a pesquisa e a classificação em uma tabela baseada em valores de chave e pode
impor exclusividade nas linhas de uma tabela. A chave primária de uma tabela é automaticamente
indexada. Alguns campos não podem ser indexados por causa de seus tipos de dados. Ex: campo do tipo
Memorando.
Incluindo registros : A Técnica
A inclusão de um novo registro em sua base de dados via ADO requer duas etapas:
1.
2.
3.
Use o método AddNew do objeto Recordset do ADO data control para incluir uma nova linha
em branco na memória e a seguir informe os registros desejados
Use o método UpDate do objeto Recordset da ADO data control para salvar os registros na
base de dados
Use o método FindFirst/Seek do objeto recordset da ADO Data Control para localizar registros
na base de dados.
Para excluir um registro usamos o método Delete do objeto Recordset da ADO. Após a exclusão do
registro devemos mover o ADO data control para um registro válido: você pode usar MoveNext ou
Moveprevious para isto.
A Prática
Nosso ponto de partida será a aplicação do capítulo anterior . Carregue o projeto adodc1.vbp e inclua
um nova caixa de texto e um botão de comando com as seguintes propriedades(Fig 1.0):
TextBox
Name
Text8
Text
""
DataSource adodc11
DataField
CommandButton Name
Codigo
CmdSair
Caption
&Sair
Style
1-Graphical
Picture
escolha uma imagem
TabStop
False
Fig 1.0 Novos controles adicionados ao projeto
adodc1.vbp
e janela das propriedades do
CommandButton
Vamos agora incluir um Menu de comandos ao projeto. Para isto , com o projeto carregado, pressione
Ctrl+E , ou selecione as opção Menu Editor ... Ctrl+E do menu Tools. A janela da figura 2.0 irá surgir
na tela. Crie um menu conforme a tabela 1.0 : ( Leia o artigo - Criando Menus com o Visual Basic)
Item do
Menu
Name
mnuFile
Caption &Arquivo
Item do
Menu
Name
mnuNew
Caption &Novo
Item do
Menu
Indent
1
Name
mnuSave
Caption &Salvar
Indent
1
Enabled False
Item do
Menu
Name
mnuEdit
Caption &Edit
Item do
Menu
Name
mnuDelete
Caption &Excluir
Indent
Fig 2.0
1
Tabela 1.0
O formulário FrmMain deverá fica com a seguinte aparência:
Voce deve alterar a
propriedade TabIndex da
caixa de texto (TextBox)
text8 para zero, de text1
para 1 e assim
sucessivamente até text7.
Isto é necessário para que o
foco esteja na caixa text8
quando o projeto for
carregado ( O padrão é o
foco estar no controle com
TabIndex=0 )
O Código
1-) Vamos agora inserir o código necessário para que nosso projeto funcione adequadamente. Clique
duas vezes sobre o formulário do projeto e insira a declaração Option Explicit na seção General
Declarations do formulário:
2-) O código a seguir, a procedure Save, irá verificar se algum registro novo foi incluído. Em caso
positivo tenta salvar o novo registro e desabilita a opção Salvar do Menu de opções.
Private Sub Save()
`Se estiver no modo de inclusão então salva
If adodc1.Recordset.EditMode = adEditAdd Then
On Error GoTo SaveFailure:
adodc1.Recordset.Update 'salva o registro
On Error GoTo 0 'desabilita o tratamento de erros
`Como não precisa salvar , então desabilita a opção Salvar do
Menu
mnuSave.Enabled = False
End If
'Inicio Tratamento de erros (SaveDone e SaveFailure são chamadas
Labels)
SaveDone:
Exit Sub
SaveFailure:
MsgBox Err.Number & vbCrLf & Err.Description 'Exibe a descrição do
erro
Resume SaveDone 'continua a execução a partir da linha SaveDone
End Sub
3-) A seguir o código para incluir um novo registro quando o usuário clicar na opção Incluir do Menu.
Private Sub mnuNew_Click()
'Inclui uma nova linha em branco na memória
adodc1.Recordset.AddNew
`habilita a opção Salvar do Menu
mnuSave.Enabled = True
End Sub
4-) O código da opção Salvar do menu, apenas chama a procedure Save.
Private Sub mnuSave_Click()
Save
End Sub
5-) O código associado ao botão CmdSair, verifica se o usuário tenta sair após incluir um registro sem
salvar, e, pergunta se ele quer salvar o registro informado.
Private Sub cmdSair_Click()
Se estiver no modo de inclusão , então pergunta se quer salvar
If adodc1.Recordset.EditMode = adEditAdd Then
If MsgBox("Deseja Salvar os dados ?", vbYesNo) = vbYes Then
Save
End If
End If
Unload Me
End Sub
6-) Para encerrar vejamos o código da opção Excluir do menu.
Private Sub mnuDelete_Click()
'ativa o tratamento de erros
On Error GoTo DeleteFailure:
'exclui o registro
adodc1.Recordset.Delete
`O registro atual agora é invalido então movemos para o anterior
adodc1.Recordset.MovePrevious
`Se estivermos no inicio do arquivo movemos para o primeiro
registro
If adodc1.Recordset.BOF Then
adodc1.Recordset.MoveFirst
End If
'Inicio do tratamento de erros
DeleteDone:
Exit Sub
DeleteFailure:
MsgBox Err.Number & vbCrLf & Err.Description
Resume DeleteDone
End Sub
7-) Não esqueça de salvar o seu projeto - adodc1.vbp ; após isto pressione F5 e veja o resultado
Localizando os Dados com ADO Data control
Aguarde conclusao...
José Carlos Macoratti
Download