Acesso Universal a Dados
1
• 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.
2
Componentes da UDA
• Microsoft ActiveX Data Objects (ADO)
• Object Linking and Embedding for
Databases (OLE DB)
• Open Data Base Connectivity (ODBC)
3
OLE DB
– 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.
4
ADO
– 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.
5
Modelo ADO
Seqüência de ações:
– Conexão a uma fonte de dados.
– Especificação de um comando(parâmetros).
– Execução do comando (linhas em uma estrutura de dados).
– Atualização da fonte de dados com as modificações feitas.
– Detecção de erros (dificuldades no estabelecimento da conexão
ou na execução do comando).
6
7
Definições
8
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.
9
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 sob a forma de linhas de uma tabela.
10
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.
11
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
12
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
13
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
14
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.
15
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.
16
Record
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.
17
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
18
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.
19
Tutorial
dos
ADO
20
Tutorial dos ADO
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.
21
Esquema da tabela Authors
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
22
Passo 1 - Abertura de uma conexã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"
23
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 *
authors"
from
24
Passo 2 - Criação de um comando
– 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
25
Passo 2 - Criação de um comando
Command cmd = New ADODB.Command
cmd.CommandText
=
"SELECT
*
authors WHERE au_lname = ?"
from
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.
26
Passo 3 - Execução de um comando
connection.Execute(CommandText,
RecordsAffected, Options)
command.Execute(RecordsAffected,
Parameters, Options)
recordset.Open
Source,
ActiveConnection,
CursorType,
LockType, Options
27
Passo 3 - Execução de um comando
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.
28
Passo 3 - Execução de um comando
 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
29
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.
30
Passo 4 - Tratamento dos dados
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
31
Loop
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”).
32
Passo 5 - Atualização dos dados
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).
33
Passo 5 - Atualização dos dados
Para utilizar transações usa-se a sintaxe que se segue.
conn.BeginTrans
rs.UpdateBatch
...
34
Passo 6 - Conclusão da atualização
Caso uma transação esteja pronta para ser aceita fazse 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.
35
Passo 6 - Conclusão da atualização
...
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
...
&
36
Passo 6 - Conclusão da atualização
...
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
37
Download

Telas de ADO