Para associar um formulário do Microsoft Access a um conjunto de registos, terá de definir a propriedade (
Recordset) do formulário como um objecto de conjunto de registos (
Recordset) válido do Data Access Objects (DAO) ou do ADO .
A propriedade
Recordset foi introduzida no Microsoft Access 2000, e permite associar formulários a objectos de conjunto de registos
Recordset do DAO ou do ADO. No entanto, os formulários do Access 2000 só podem ser do tipo actualizável se a ligação ADO for aberta usando MSDataShape e fornecedores de OLEDB para SQL Server.
Para obter informações adicionais sobre esta limitação no Access 2000, clique no número de artigo seguinte para visualizar o artigo na base de dados de conhecimento da Microsoft (KB,
Microsoft Knowledge Base):
227053
(http://support.microsoft.com/kb/227053/PT/
)
ACC2000: Forms Based on ADO Recordsets Are Read-Only
No Microsoft Access 2002 ou posterior, poderá criar um formulário actualizável associado a um conjunto de registos ADO que utilize outros fornecedores de OLEDB. O formulário tem de obedecer a vários requisitos gerais para ser do tipo actualizável quando é associado a um conjunto de registos ADO. Estes requisitos gerais são:
- O conjunto de registos ADO subjacente tem que ser actualizável.
- O conjunto de registos tem que conter um ou mais campos que sejam indexados exclusivamente, tal como a chave primária de uma tabela.
Os outros requisitos necessários à capacidade de actualização variam consoante o fornecedor. Este artigo descreve os outros requisitos quando utilizar os fornecedores Microsoft SQL Server, Jet, ODBC e Oracle OLEDB.
Requisitos para Microsoft SQL Server
Existem dois requisitos principais para suportar a capacidade de actualização quando associa um formulário a um conjunto de registos ADO que esteja a utilizar dados do Microsoft SQL Server:
- A ligação do conjunto de registos ADO deve utilizar o fornecedor de OLEDB Microsoft Access 10.0 como fornecedor de serviços.
- A ligação do conjunto de registos ADO deve utilizar o fornecedor de OLEDB Microsoft SQL Server como fornecedor de dados.
NOTA: o fornecedor de OLEDB Microsoft Access 10.0 é um fornecedor de serviços OLEDB que foi criado especificamente para ser usado no Microsoft Access. Não foi concebido para ser utilizado noutras aplicações que não o Microsoft Access e não é suportado por outras aplicações.
Quando cria conjuntos de registos ADO no Microsoft Access, pode escolher qual a ligação ADO que será usada pelo conjunto de registos. O código ADO pode partilhar a ligação ADO que está a ser utilizada pelo Microsoft Access para a base de dados do SQL Server que esteja aberta num ficheiro de projecto (ADP) do Access, ou poderá criar uma nova ligação ADO a uma outra base de dados SQL Server através de programação.
Partilhar a ligação ADO utilizada pelo Microsoft Access
Se estiver a utilizar um ficheiro de projecto (.adp) do Access ligado a uma base de dados do Microsoft SQL Server, o código ADO poderá partilhar a ligação ADO que está a ser utilizada pelo Microsoft Access. Esta ligação é exposta pela propriedade
CurrentProject.AccessConnection.
O exemplo seguinte demonstra como associar um formulário a um conjunto de registos ADO baseado em dados do SQL Server que partilha uma ligação ADO com o Microsoft Access.
- Abra o projecto de exemplo NorthwindCS.adp.
- Abra o formulário Clientes na vista Estrutura.
- Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
- Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
Private Sub Form_Open(Cancel As Integer)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
'Use the ADO connection that Access uses
Set cn = CurrentProject.AccessConnection
'Create an instance of the ADO Recordset class, and
'set its properties
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Source = "SELECT * FROM Customers"
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.Open
End With
'Set the form's Recordset property to the ADO recordset
Set Me.Recordset = rs
Set rs = Nothing
Set cn = Nothing
End Sub
- Guarde e feche o formulário.
- Abra o formulário Clientes na vista de Formulário.
- Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis baseado em dados do SQL Server.
Abrir uma ligação ADO Separada
Em determinada altura, poderá precisar de abrir e gerir a sua própria ligação ADO ao SQL Server. Por exemplo, teria que utilizar esta abordagem se estivesse a escrever código numa base de dados (.mdb) ou num ficheiro de projecto (.adp) do Access que estivesse ligada a uma outra base de dados do SQL Server que não aquela a que está ligada a sua aplicação. Repare que quando usa esta abordagem, a Microsoft recomenda que feche a ligação ADO que abriu quando esta já não for necessária. Por exemplo, poderá querer fechar a ligação ADO no evento
Unload do formulário.
O exemplo seguinte demonstra como abrir a sua própria ligação ADO a uma base de dados do Microsoft SQL Server e como associar um formulário à mesma:
- Abra a base de dados de exemplo Adamastor.mdb.
- Abra o formulário Clientes na vista Estrutura.
- Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
- Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
Private Sub Form_Open(Cancel As Integer)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
'Create a new ADO Connection object
Set cn = New ADODB.Connection
'Use the Access 10 and SQL Server OLEDB providers to
'open the Connection
'You will need to replace MySQLServer with the name
'of a valid SQL Server
With cn
.Provider = "Microsoft.Access.OLEDB.10.0"
.Properties("Data Provider").Value = "SQLOLEDB"
.Properties("Data Source").Value = "MySQLServer"
.Properties("User ID").Value = "sa"
.Properties("Password").Value = ""
.Properties("Initial Catalog").Value = "NorthwindCS"
.Open
End With
'Create an instance of the ADO Recordset class, and
'set its properties
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Source = "SELECT * FROM Customers"
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.Open
End With
'Set the form's Recordset property to the ADO recordset
Set Me.Recordset = rs
Set rs = Nothing
Set cn = Nothing
End Sub
- Adicione o código abaixo ao evento Unload do formulário:
Private Sub Form_Unload(Cancel As Integer)
'Close the ADO connection we opened
Dim cn As ADODB.Connection
Set cn = Me.Recordset.ActiveConnection
cn.Close
Set cn = Nothing
End Sub
- Guarde o formulário e feche-o.
- Abra o formulário Clientes na vista de Formulário.
- Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis baseado em dados do SQL Server.
Requisitos para o Microsoft Jet
Apesar de ser possível associar um formulário a um conjunto de registos ADO que utilize dados de uma base de dados Jet, a Microsoft recomenda que utilize DAO. O DAO está optimizado para Jet e, normalmente, tem um desempenho mais rápido que o ADO quando utilizado com uma base de dados Jet.
Quando associa um formulário a um conjunto de registos ADO utilizando dados do Microsoft Jet, existem duas alternativas:
- A propriedade LigaçãoActiva (ActiveConnection) do conjunto de registos deve utilizar o fornecedor de serviços de OLEDB Microsoft Access 10.0, assim como o fornecedor de dados OLEDB Microsoft Jet 4.0 e o conjunto de registos deve estar situado no servidor.
- ou - - A propriedade LigaçãoActiva (ActiveConnection) do conjunto de registos deve utilizar apenas o servidor de dados de OLEDB Microsoft Jet 4.0 e o conjunto de registos deve estar situado no cliente.
Tal como referido anteriormente na secção "Microsoft SQL Server" deste artigo, poderá escolher qual a ligação ADO que será utilizada pelo conjunto de registos quando utilizar uma base de dados Jet. O código ADO pode partilhar a ligação ADO que está a ser utilizada pelo Microsoft Access para o ficheiro de base de dados (.mdb) Jet aberto, ou pode criar uma nova ligação ADO para um ficheiro de base de dados Jet separado através de programação.
Partilhar a ligação ADO utilizada pelo Microsoft Access
Se estiver a escrever código na mesma base de dados (.mdb) do Microsoft Access que contém os dados de que o conjunto de registos necessita, é possível ao código ADO partilhar a ligação ADO que está a ser utilizada pelo Microsoft Access. Esta ligação é exposta pela propriedade
CurrentProject.AccessConnection. O exemplo seguinte demonstra como associar um formulário a um conjunto de registos ADO numa base de dados Jet, partilhando a ligação ADO que está a ser utilizada pelo Microsoft Access:
- Abra a base de dados de exemplo Adamastor.mdb.
- Abra o formulário Clientes na vista Estrutura.
- Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
- Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
Private Sub Form_Open(Cancel As Integer)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CurrentProject.AccessConnection
'Create an instance of the ADO Recordset class, and
'set its properties
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Source = "SELECT * FROM Customers"
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.CursorLocation = adUseServer
.Open
End With
'Set the form's Recordset property to the ADO recordset
Set Me.Recordset = rs
Set rs = Nothing
Set cn = Nothing
End Sub
- Guarde o formulário e feche-o.
- Abra o formulário Clientes na vista de Formulário.
- Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis que utilizam dados Jet.
Abrir uma ligação ADO Separada
Em determinada altura, poderá precisar de abrir e gerir a sua própria ligação ADO a uma base de dados Jet. Por exemplo, teria que utilizar esta abordagem se estivesse a escrever código numa base de dados separada da base de dados que contém os dados de que necessita. Repare que quando usa esta abordagem, a Microsoft recomenda que feche a ligação ADO que abriu quando esta já não for necessária. Por exemplo, poderá querer fechar a ligação ADO no evento
Unload do formulário.
O exemplo seguinte demonstra como abrir a sua própria ligação ADO a uma base de dados Microsoft Jet e como associar um formulário à mesma:
- Crie uma nova base de dados vazia.
- Importe o formulário Clientes da base de dados de exemplo Adamastor.mdb.
- Abra o formulário Clientes na vista Estrutura.
- Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
- Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
Private Sub Form_Open(Cancel As Integer)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
'Create a new ADO Connection object
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Access.OLEDB.10.0"
.Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"
.Properties("Data Source").Value = _
"C:\Program Files\Microsoft Office\Office10" & _
"\Samples\Northwind.mdb"
.Open
End With
'Create an instance of the ADO Recordset class, and
'set its properties
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Source = "SELECT * FROM Customers"
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.Open
End With
'Set the form's Recordset property to the ADO recordset
Set Me.Recordset = rs
Set rs = Nothing
Set cn = Nothing
End Sub
- Adicione o código abaixo ao evento Unload do formulário:
Private Sub Form_Unload(Cancel As Integer)
'Close the ADO connection we opened
Dim cn As ADODB.Connection
Set cn = Me.Recordset.ActiveConnection
cn.Close
Set cn = Nothing
End Sub
- Guarde o formulário e feche-o.
- Abra o formulário Clientes na vista de Formulário.
- Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis que utilizam dados Jet.
Requisitos para ODBC
Quando associa um formulário a um conjunto de registos ADO que utiliza dados de uma base de dados ODBC, existem dois requisitos principais:
- A ligação ADO utilizada pelo conjunto de registos deve utilizar o fornecedor de OLEDB Microsoft para ODBC.
- O conjunto de registos ADO deve estar situado no cliente.
O exemplo seguinte demonstra como abrir uma ligação ADO a uma base de dados ODBC e como associar um formulário à mesma.
NOTA: Estes passos partem do princípio que a base de dados ODBC contém uma tabela
CLIENTES de estrutura idêntica à tabela
Clientes da base de dados de exemplo Adamastor.mdb. Também partem do princípio que foi criado um DSN ODBC chamado MyDSN que utiliza o controlador ODBC que deve ser ligado à base de dados subjacente.
- Abra a base de dados de exemplo Adamastor.mdb.
- Abra o formulário Clientes na vista Estrutura.
- Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
- Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
Private Sub Form_Open(Cancel As Integer)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strConnection As String
strConnection = "ODBC;DSN=MyDSN;UID=sa;PWD=;DATABASE=Northwind"
'Create a new ADO Connection object
Set cn = New ADODB.Connection
With cn
.Provider = "MSDASQL"
.Properties("Data Source").Value = strConnection
.Open
End With
'Create an instance of the ADO Recordset class, and
'set its properties
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Source = "SELECT * FROM Customers"
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.Open
End With
'Set the form's Recordset property to the ADO recordset
Set Me.Recordset = rs
Set rs = Nothing
Set cn = Nothing
End Sub
- Adicione o código abaixo ao evento Unload do formulário:
Private Sub Form_Unload(Cancel As Integer)
'Close the ADO connection we opened
Dim cn As ADODB.Connection
Set cn = Me.Recordset.ActiveConnection
cn.Close
Set cn = Nothing
End Sub
- Guarde o formulário e feche-o.
- Abra o formulário Clientes na vista de Formulário.
- Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis baseado em dados ODBC.
Requisitos para Oracle
Quando associa um formulário a um conjunto de registos ADO que utiliza dados de uma base de dados Oracle, existem dois requisitos principais:
- A ligação ADO que é utilizada pelo conjunto de registos deve utilizar um fornecedor de OLEDB Microsoft para Oracle.
- O conjunto de registos ADO tem que estar situado no cliente.
O exemplo seguinte demonstra como abrir uma ligação ADO a uma base de dados Oracle e como associar um formulário à mesma.
NOTA: Estes passos partem do princípio que a base de dados Oracle contém uma tabela
CLIENTES de estrutura idêntica à tabela
Clientes da base de dados de exemplo Adamastor.mdb.
- Abra a base de dados de exemplo Adamastor.mdb.
- Abra o formulário Clientes na vista Estrutura.
- Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
- Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
Private Sub Form_Open(Cancel As Integer)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
'Create a new ADO Connection object
Set cn = New ADODB.Connection
With cn
.Provider = "MSDAORA"
.Properties("Data Source").Value = "MyOracleServer"
.Properties("User ID").Value = "username"
.Properties("Password").Value = "password"
.Open
End With
'Create an instance of the ADO Recordset class, and
'set its properties
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Source = "SELECT * FROM Customers"
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.Open
End With
'Set the form's Recordset property to the ADO recordset
Set Me.Recordset = rs
Set rs = Nothing
Set cn = Nothing
End Sub
- Adicione o código abaixo ao evento Unload do formulário:
Private Sub Form_Unload(Cancel As Integer)
'Close the ADO connection we opened
Dim cn As ADODB.Connection
Set cn = Me.Recordset.ActiveConnection
cn.Close
Set cn = Nothing
End Sub
- Guarde o formulário e feche-o.
- Abra o formulário Clientes na vista de Formulário.
- Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis baseado em dados Oracle.
Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft (KB,
Microsoft Knowledge Base):
281784
(http://support.microsoft.com/kb/281784/
)
Difference Between Connection and AccessConnection Properties
Os produtos de outros fabricantes referidos neste artigo são fabricados por empresas independentes da Microsoft. A Microsoft não concede nenhuma garantia, implícita ou de outra natureza, relativamente ao desempenho ou à fiabilidade destes produtos.