ACC2000: Formulários com base em conjuntos de registos ADO são só de leitura

Traduções de Artigos Traduções de Artigos
Artigo: 227053 - Ver produtos para os quais este artigo se aplica.
Avançado: Requer conhecimentos avançados sobre codificação, interoperabilidade e multi-utilizador.

Este artigo aplica-se apenas a uma base de dados do Microsoft Access (.mdb).

Para obter uma versão de Microsoft Access 2002 deste artigo, consulte 281998.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando tenta editar dados num formulário com base num conjunto de registos do ActiveX Data Objects (ADO), o formulário é só de leitura. Isto ocorre mesmo que pode editar com êxito o conjunto de registos directamente com o ADO.

Causa

Formulários do Microsoft Access só irão permitir editar dados a partir de um conjunto de registos ADO se o conjunto de registos ADO é criado utilizando uma combinação dos fornecedores MSDataShape e OLEDB para SQL Server.

Resolução

A Microsoft fornece exemplos de programação apenas, para fins sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, as garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas que são utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador. A resolução depende da origem de dados do conjunto de registos que pretende vincular a propriedade de conjunto de registos do formulário.

Origem de dados baseada no Microsoft SQL Server

Se a origem dos dados para o formulário for fornecida pelo Microsoft SQL Server 6.5 ou posterior, pode utilizar os fornecedores MSDataShape e OLEDB para SQL Server para criar um conjunto de registos ADO que pode ser editado num formulário do Microsoft Access.

Nota : formulários do Microsoft Access só permitirá editar uma tabela a partir do conjunto de registos em que o formulário se baseia. Se definir a propriedade de conjunto de registos do formulário a um conjunto de registos ADO baseado numa vista, procedimento armazenado ou instrução SQL que contém várias tabelas, tem de definir a propriedade tabela exclusiva para o nome da tabela que pretende editar no formulário. Campos de outras tabelas no conjunto de registos do formulário vão estar visíveis no formulário, mas não poderá editá-los.

Para utilizar os fornecedores MSDataShape e OLEDB para SQL Server para criar um conjunto de registos ADO e para atribuir o conjunto de registos a um formulário, siga estes passos:

atenção : Se seguir os passos neste exemplo, modificará a base de dados de exemplo Adamastor.mdb. Convém cópia de segurança do ficheiro de base de dados Adamastor.mdb e siga estes passos numa cópia da base de dados.

  1. Crie uma origem de dados ODBC com base na base de dados de exemplo Pubs instalado com o Microsoft SQL Server.
  2. Abra a base de dados exemplo Adamastor.mdb.
  3. Ligar a tabela autores da origem de dados criada no passo 1.
  4. Criar um novo formulário baseado na tabela autores e abra-a na vista de estrutura .
  5. Adicione todos os campos à secção de detalhe do formulário.
  6. Desmarque a propriedade do formulário OrigemDosRegistos , para que o formulário directamente já não está ligado à tabela Authors.
  7. No menu Ver , clique em código .
  8. No menu Ferramentas , clique em References .
  9. Adicione uma referência para o Microsoft ActiveX Data Objects 2.1 Library se não estiver já seleccionada.
  10. Clique em OK para fechar a caixa de diálogo References .
  11. Adicione o seguinte código ao módulo do formulário:
    Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
       Set cn = New ADODB.Connection
       With cn
          .Provider = "MSDataShape"
             
          'The code below uses a sample server name, user ID, and password. 
          'Be sure to use your actual server name, user ID, and password.
          .ConnectionString = "DATA PROVIDER=SQLOLEDB;DATA _
             SOURCE=MySQLServerName;DATABASE=Pubs;UID=sa;PWD=;"
          .CursorLocation = adUseServer
          .Open
       End With
       
       Set rs = New ADODB.Recordset
       With rs
          .Source = "SELECT * FROM Authors"
          .ActiveConnection = cn
          .CursorType = adOpenKeyset
          .LockType = adLockOptimistic
          .Open
       End With
       Set Me.Recordset = rs
       Me.UniqueTable = "Authors"
    End Sub
    					
  12. Feche o formulário e guardá-lo como frmAuthors.
  13. Abra o formulário frmAuthors na vista de formulário. Tenha em atenção que o formulário com êxito é povoado com dados a partir do conjunto de registos ADO.
  14. A tentar editar qualquer campo no formulário.

    Tenha em atenção que pode editar com êxito o formulário.

Origem de dados com base em outras origens de dados

Se a origem de dados para o formulário é fornecida por qualquer outra origem, tais como o motor de base de dados do Microsoft Jet, não é possível criar um conjunto de registos ADO que pode ser editado com um formulário, mesmo que pode editar o conjunto de registos directamente com o ADO. Neste caso a única solução é utilizar o Data Access Objects (DAO) para criar o conjunto de registos e, em seguida, para atribuir o conjunto de registos a propriedade de conjunto de registos do formulário. DAO é extremamente optimizado para o motor de base de dados do Microsoft Jet e, pode aceder a um número de origens de dados ISAM ou ODBC que podem ser acedidas pelo motor de base de dados Jet.

Se estiver a utilizar uma origem de dados ISAM ou ODBC, ligue a tabela à base de dados Microsoft Jet (.mdb) e utilize DAO para abrir um conjunto de registos baseado na tabela ligada. Desde que o conjunto de registos pode ser editado directamente através de DAO, um formulário baseado num conjunto de registos pode ser editado bem. Para criar um conjunto de registos DAO que pode ser editado num formulário do Microsoft Access, siga estes passos.

atenção : Se seguir os passos neste exemplo, modificará a base de dados de exemplo Adamastor.mdb. Convém cópia de segurança do ficheiro de base de dados Adamastor.mdb e siga estes passos numa cópia da base de dados.

  1. Abra a base de dados exemplo Adamastor.mdb.
  2. Abra o formulário produtos na vista de estrutura .
  3. Desmarque a propriedade do formulário OrigemDosRegistos , para que o formulário directamente já não está ligado à tabela produtos .
  4. No menu Ver , clique em código.
  5. No menu Ferramentas , clique em referências.
  6. Adicione uma referência à Microsoft DAO 3.6 Object Library se não estiver já seleccionada.
  7. Clique em OK para fechar a caixa de diálogo References .
  8. Adicione o seguinte código ao módulo do formulário:
    Sub Form_Open(Cancel As Integer)
       Dim db As DAO.Database
       Dim rs As DAO.Recordset
    
       'Assumes the linked table is in the current database
       Set db = CurrentDb
       Set rs = db.OpenRecordset("SELECT * FROM Products", dbOpenDynaset)
       Set Me.Recordset = rs      
    End Sub
    					
  9. Guarde e feche o formulário produtos .
  10. Abra o formulário produtos na vista de formulário. Tenha em atenção que o formulário com êxito é povoado com dados a partir do conjunto de registos DAO.
  11. A tentar editar qualquer campo no formulário.

    Tenha em atenção que pode editar com êxito o formulário.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo.

Mais Informação

Passos para reproduzir o comportamento

atenção : Se seguir os passos neste exemplo, modificará a base de dados de exemplo Adamastor.mdb. Convém cópia de segurança do ficheiro de base de dados Adamastor.mdb e siga estes passos numa cópia da base de dados.

  1. Abra a base de dados exemplo Adamastor.mdb.
  2. Abra o formulário produtos na vista de estrutura .
  3. Desmarque a propriedade do formulário OrigemDosRegistos , para que o formulário directamente já não está ligado à tabela produtos .
  4. No menu Ver , clique em código .
  5. No menu Ferramentas , clique em References .
  6. Adicione uma referência para o Microsoft ActiveX Data Objects 2.1 Library se não estiver já seleccionada.
  7. Clique em OK para fechar a caixa de diálogo References .
  8. Adicione o seguinte código ao módulo do formulário:
    Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
    
       'Use Microsoft Access's OLEDB connection to the Jet database
       Set cn = CurrentProject.Connection
       Set rs = New ADODB.Recordset
       With rs
          .Source = "SELECT * FROM Products"
          .ActiveConnection = cn
          .CursorType = adOpenKeyset
          .LockType = adLockOptimistic
          .Open
       End With
       Set Me.Recordset = rs      
    End Sub
    					
  9. Guarde e feche o formulário produtos.
  10. Abra o formulário produtos na vista de formulário.

    Tenha em atenção que o formulário com êxito é povoado com dados a partir do conjunto de registos ADO.
  11. A tentar editar qualquer campo no formulário.

    Note que não é possível editar o formulário e que o Microsoft Access apresenta o texto "Formulário é só de leitura" na barra de estado.

Referências

Para mais informações sobre o formulário Propriedades do conjunto de registos, clique em Ajuda do Microsoft Access no menu de Ajuda escreva propriedade de conjunto de registos do formulário no Assistente do Office ou no Assistente de respostas e, em seguida, clique em Procurar para visualizar o tópico.

Propriedades

Artigo: 227053 - Última revisão: 23 de junho de 2005 - Revisão: 2.0
A informação contida neste artigo aplica-se a:
  • Microsoft Access 2000 Standard Edition
Palavras-chave: 
kbmt kbbug kbdta kbpending KB227053 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 227053

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com