A fonte de dados utilizada foi especificada como sendo o Banco de

Propaganda
Acesso Universal a Dados
Universal Data Access (UDA) é a estratégia da Microsoft para acesso generalizado à informação, garantindo
acesso a fontes de informação relacionais ou não.
Os componentes da UDA são:
 Microsoft ActiveX Data Objects (ADO)
 Object Linking and Embedding for Databases (OLE DB)
 Open Data Base Connectivity (ODBC)
OLE DB é um conjunto de interfaces do Component Object Model (COM) que fornece aos programas de
aplicação acesso uniforme a dados armazenados em diversas fontes de informação além de implementar
serviços de bancos de dados. Esta interface, tendo sido projetada para otimizar a funcionalidade não é simples
nem amigável.
ADO caracteriza um modelo de programação ou seqüência de atividades necessária para que se tenha acesso
a uma fonte de dados e se possa atualiza-la. Este modelo é orientado a objeto. Os objetos possuem métodos
que executam operações sobre os dados, e propriedades, que ou representam algum atributo dos dados ou
controlam o comportamento de algum método de objeto. Associados aos objetos ocorrem os eventos, que são
notificações de que alguma operação ou ocorreu ou está prestes a ocorrer.
O modelo de programação ADO é composto da seguinte seqüência de ações:
 Conexão a uma fonte de dados. Opcionalmente pode-se garantir que todas as alterações feitas na fonte de
dados sejam executadas com sucesso (total como um todo) ou descartadas em bloco.
 Especificação de um comando para ter acesso à fonte de dados, podendo usar parâmetros variáveis e
optar por otimização de desempenho.
 Execução do comando
 Se o comando provocar o retorno de dados, sob a forma de linhas de uma tabela, armazenamento das
linhas em uma estrutura de dados que possa ser facilmente examinada e atualizada.
 Atualização da fonte de dados com as modificações feitas na estrutura de dados contendo as linhas, se for
o caso.
 Fornecimento de processo de detecção de erros (usualmente provenientes de dificuldades no
estabelecimento da conexão ou na execução do comando).
1
O desenho que se segue ilustra o Modelo ADO.
2
Definições
Connnection
Conexão é o ambiente necessário para a troca de dados. Isto é feito por meio de um objeto Connection.
Opcionalmente pode-se especificar a existência de transações que delimitem o início e o final de uma série de
operações de aceso a dados com uma unidade lógica entre elas.
A fonte de dados alvo de uma conexão pode ser especificada por um connection string ou um URL.
Command
Um comando é uma forma de manipular os dados através de uma conexão estabelecida. Os comandos
adicionam, excluem ou atualizam dados na fonte de dados ou ainda recuperam dados soba forma de linhas de
uma tabela.
Parameter
Parâmetros fornecem partes variáveis de comandos, sendo úteis para comandos que se comportam como
funções. Por exemplo um comando para transferir recursos de uma conta bancária para outra recebe como
parâmetros os valores a transferir e os números das contas e o mesmo comando serve para múltiplas
aplicações. O modelo utiliza o objeto Parameter.
RecordSet
Comandos que retornam dados sob a forma de linhas de uma tabela os armazenam em um armazenamento
local que o modelo denomina de objeto RecordSet, que é uma maneira de examinar e modificar essas linhas,
permitindo:
 Especificação das linhas disponíveis para exame
 Percurso sobre as linhas
 Especificação da ordem de percurso sobre as linhas
 Adicionar, excluir ou modificar linha
 Atualizar a fonte de dados com as linhas modificadas
 Gerenciar o estado do RecordSet como um todo
Field
As linhas de um RecordSet consistem de um ou mais campos, contidos em objetos Fields. O conjunto de
campos semelhantes forma uma coluna que tem atributos tais como:
 Nome
 Tipo de dado
 Valor
Error
Os erros ocorrem nas aplicações usualmente como resultado de:
 Incapacidade de estabelecimento de uma conexão
 Incapacidade de execução de um comando
 Incapacidade de execução de uma operação sobre um objeto no estado em que se encontra, tal como
tentar utilizar um objeto RecordSet ainda não inicializado
Property
Cada objeto ADO possui um conjunto de propriedades que descrevem o objeto ou controlam seu
comportamento. Existem propriedades embutidas que estão sempre presentes e propriedades dinâmicas que
são fornecidas pelo provedor de dados ou provedor de serviços e que existem apenas durante a utilização
desse provedor.
3
Record
Os objetos Record permitem a utilização dos conceitos de container e content. Os containers são
componentes de sistemas de armazenamento de informações que abrigam conteúdos de informação ou outros
containers subordinados. Em um sistema de arquivos os containers são os diretórios e os contents são os
arquivos. Em um sistema de correio eletrônico os containers são as pastas e os contents são as mensagens.
Estes conceitos ampliam o horizonte pois nem todas as fontes de dados estão armazenadas em tabelas de
bancos de dados. Records podem ser utilizados como containers ou contents. Um objeto Record pode
representar itens tais como um diretório ou arquivo, ou ainda uma linha de um RecordSet.
Collection
As Collections são objetos que contem outros objetos de um dado tipo. Os objetos da coleção podem ser
recuperados por meio de propriedades da Collection tais como nome, um string ou por posição ordinal. As
quatro Collections do modelo ADO são:
 Connection
 Command
 RecordSet
 Properties
Event
Eventos são notificações de que alguma operação ou ocorreu ou está prestes a ocorrer. Por meio de eventos
pode organizar as aplicações contendo diversas tarefas assíncronas. Os manipuladores de eventos são um
meio poderoso de programação. Quando invocados antes da realização de uma operação dão a oportunidade
de examinar ou modificar os parâmetros da operação ou até cancela-la se for desejado. Quando invocados
após a o término de uma operação notificam a realização de uma operação assíncrona.
4
Tutorial dos ADO
A Microsoft apresenta um Tutorial dos ADO tanto em sua “home page” quanto nos arquivos de Ajuda da
MSDN e que será resumido daqui por diante. A fonte de dados utilizada foi especificada como sendo o Banco
de Dados com ODBC DSN=pubs. Este Banco é fornecido com Microsoft SQL Server. Os exemplos que serão
apresentados foram baseados na tabela authors, cujo esquema é o que se segue.
Column Name
au_id
au_lname
au_fname
phone
address
city
state
zip
contract
Data Type(length)
ID (11)
varchar(40)
varchar(20)
char(12)
varchar(40)
varchar(20)
char(2)
char(5)
bit
Nullable
no
no
no
no
yes
yes
yes
yes
no
Passo 1 - Abertura de uma conexão
Para o estabelecimento de uma conexão a fonte de dados é especificada por um Connection string. Os
métodos de abertura de conexões são connection.Open e recordset.Open, cujas sintaxes são:
connection.Open ConnectionString, UserID, Password, OpenOptions
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
ActiveConnection pode ser um string, uma variável representando um string ou um objeto Connection
especificando uma conexão aberta.
Exemplo:
Dim cnn as New ADODB.Connection
cnn.Open "DSN=pubs;uid=sa;pwd=;database=pubs"
Passo 2 - Criação de um comando
Comandos são especificados por
 um texto que é um string ou uma variável que representa um string
 valor da propriedade CommandText de um objeto Command
Exemplo:
Dim cmd As New ADODB.command
Set cmd.ActiveConnection = cnn
cmd.CommandText = "SELECT * from authors"
Comandos parametrizados podem ser especificados com a colocação de um identificador de lugar de inserção
de parâmetros, que é o caractere '?' . O conteúdo de um comando SQL é fixo mas pode-se criar um comando
parametrizado nos quais os identificadores de lugar de inserção, '?' , possam ser substituídos pelos parâmetros
por ocasião da execução do comando. O desempenho dos comandos parametrizados pode ser otimizado com
o uso da propriedade Prepared. Caso se desejasse consultar os autores com determinado sobrenome, far-se-ia
o seguinte:
5
Command cmd = New ADODB.Command
cmd.CommandText = "SELECT * from authors WHERE au_lname = ?"
Este processo é genérico mas, no modelo Microsoft, exige a especificação de um objeto Parameter e sua
incorporação à coleção Parameters. Após a especificação deve-se criar um objeto Parameter e fazer
a atribuição de suas propriedades.
Passo 3 - Execução de um comando
A execução de um comando pode ser feita de uma das maneiras que se seguem.
connection.Execute(CommandText, RecordsAffected, Options)
command.Execute(RecordsAffected, Parameters, Options)
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
A execução de comandos exige a existência de uma conexão aberta. Cada método representa uma conexão de
sua maneira:
 Connection.Execute
usa
a
conexão
embutida
no
objeto
Connection.

Command.Execute usa o objeto Connection especificado pela propriedade ActiveConnection.

Recordset.Open usa ou o connect string ou o objeto Connection operando, ou ainda o objeto
Connection especificado na sua propriedade ActiveConnection.
Outra diferença de uso pode ser vista a seguir.
 Usando Connection.Execute o comando é especificado no texto.
 Usando Command.Execute o comando não é visível, sendo especificado pela propriedade
Command.CommandText e podendo ser parametrizado.
 Usando Recordset.Open o comando é o argumento Source que pode ser ou um texto ou um objeto
Command.
Exemplo:
Recordset rs = New ADODB.Recordset
rs.Open cmd, conn, adOpenDymanic, adLockBatchOptimistic
Passo 4 - Tratamento dos dados
A manipulação de dados é a usual em Recordsets podendo-se usar a propriedade Filter para controlar as
linhas às quais se tenha acesso e a propriedade Sort para controlar a ordem de navegação.
Exemplo:
rs!au_lname.Optimize = TRUE
rs.Sort = "au_lname ASCENDING"
rs.Filter = "phone LIKE '415 5*'"
rs.MoveFirst
Do While Not rs.EOF
Debug.Print "Name: " & rs!au_fname & " " rs!au_lname & _
"Phone: " rs!phone & vbCr
rs!phone = "777" & Mid(rs!phone, 5, 11)
rs.MoveNext
Loop
6
Passo 5 - Atualização dos dados
As atualizações feitas nos dados de uma linha ou registro corrente não são aplicadas imediatamente ao
Recordset correspondente, ficando em um “buffer” de cópia ou podendo então ser aplicadas à fonte de dados
ou descartadas. A propagação das atualizações até a fonte de dados pode ser efetuada de uma de dois modos:
 Modo imediato, no qual as atualizações se propagam tão logo se declare que a linha está completa.
 Modo “batch”, no qual são realizadas atualizações em um conjunto definido de linhas e só quando se
declarar completas as atualizações nesse conjunto de linhas a propagação se realiza sob a forma de
um lote (“batch”).
No modo imediato o método Update propaga as atualizações até a fonte de dados. No modo “batch” cada
invocação do método Update propaga as alterações até o “buffer” de cópia mas só o método UpdateBatch
propaga as alterações até a fonte de dados. Isto ocorre sempre que o Recordset tenha sido aberto no modo
“batch” (adLockBatchOptimistic).
Para utilizar transações usa-se a sintaxe que se segue.
conn.BeginTrans
rs.UpdateBatch
...
Passo 6 - Conclusão da atualização
Caso uma transação esteja pronta para ser aceita faz-se a atualização da fonte de dados da forma.
...
conn.CommitTrans
Caso haja erros em parte de uma transação filtra-se o Recordset com a constante e anulam-se as alterações
porventura feitas.
Exemplo:
...
On Error
rs.Filter = adFilterConflictingRecords
rs.MoveFirst
Do While Not rs.EOF
Debug.Print "Conflict: Name: " & rs!au_fname " " & rs!au_lname
rs.MoveNext
Loop
conn.Rollback
Resume Next
...
Após a conclusão das atualizações os objetos Recordset e Connection são fechados e o programa termina, da
forma abaixo.
Rst.Close
Cnn.Close
7
Download