ACC2000: Formulários com base em conjuntos de registros ADO são somente leitura

Traduções deste artigo Traduções deste artigo
ID do artigo: 227053 - Exibir os produtos aos quais esse artigo se aplica.
Avançadas: Requer especialista de codificação, interoperabilidade e habilidades de multiusuário.

Este artigo se aplica somente a um banco de dados do Microsoft Access (.mdb).

Para uma versão deste artigo do Microsoft Access 2002, consulte 281998.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando você tenta editar dados em um formulário com base em um recordset ADO (ActiveX Data Objects), o formulário é somente leitura. Isso ocorre mesmo se você pode editar com êxito o conjunto de registros diretamente com o ADO.

Causa

Formulários do Microsoft Access só permitirá que você editar dados de um conjunto de registros ADO se o recordset ADO é criado usando uma combinação dos provedores MSDataShape e SQL Server OLEDB.

Resolução

Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação para uma finalidade específica. Este artigo presume que você está familiarizados com a linguagem de programação que está sendo demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Engenheiros de suporte podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades. A resolução depende a fonte de dados do conjunto de registros que você deseja vincular a propriedade Recordset do formulário.

Fonte de dados com base no Microsoft SQL Server

Se a fonte de dados para o formulário for fornecido pelo Microsoft SQL Server 6.5 ou posterior, você pode usar os provedores MSDataShape e SQL Server OLEDB para criar um recordset ADO que pode ser editado em um formulário do Microsoft Access.

Observação : formulários do Microsoft Access só permitirá que você editar uma tabela de conjunto de registros no qual o formulário está baseado. Se você definir a propriedade Recordset do formulário como um conjunto de registros ADO baseado em um modo de exibição, procedimento armazenado ou instrução SQL que contém várias tabelas, defina a propriedade do formulário TabelaExclusiva com o nome da tabela que você deseja editar no formulário. Campos de outras tabelas no conjunto de registros do formulário serão ser visíveis no formulário, mas você não poderá editá-los.

Para usar os provedores MSDataShape e SQL Server OLEDB para criar um conjunto de registros ADO e para atribuir o conjunto de registros a um formulário, execute estas etapas:

cuidado : se você seguir as etapas neste exemplo, você modificar o banco de dados de exemplo Northwind.mdb. Convém fazer o backup do arquivo Northwind.mdb e seguir essas etapas numa cópia do banco de dados.

  1. Cria uma fonte de dados ODBC baseada o banco de dados Pubs de exemplo instalado com o Microsoft SQL Server.
  2. Abra o banco de dados de exemplo Northwind.mdb.
  3. Vincule a tabela autores da fonte de dados que você criou na etapa 1.
  4. Crie um novo formulário baseado na tabela autores e abra-a no modo de Design .
  5. Adicione todos os campos à seção de detalhe do formulário.
  6. Desmarque a propriedade do formulário OrigemDoRegistro , para que o formulário não diretamente está acoplado à tabela Authors.
  7. No menu Exibir , clique em código .
  8. No menu Ferramentas , clique em referências .
  9. Adicione uma referência para a Microsoft ActiveX Data Objects 2.1 Library se ele não ainda estiver selecionado.
  10. Clique em OK para fechar a caixa de diálogo referências .
  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 salvá-lo como frmAuthors.
  13. Abra o formulário frmAuthors no modo de formulário. Observe que o formulário é preenchido com êxito com dados do conjunto de registros ADO.
  14. Tente editar qualquer campo no formulário.

    Observe que você pode editar com êxito o formulário.

Fonte de dados com base em outras fontes de dados

Se a fonte de dados para o formulário é fornecida por outra fonte, como o mecanismo de banco de dados Microsoft Jet, você não pode criar um recordset ADO que pode ser editado com um formulário, mesmo que você pode editar o conjunto de registros diretamente com o ADO. A única solução nesse caso é usar o Data Access Objects (DAO) para criar o conjunto de registros e depois atribuir o conjunto de registros a propriedade Recordset do formulário. DAO é altamente otimizado para o mecanismo de banco de dados Microsoft Jet e pode acessar um número de fontes de dados ISAM ou ODBC que podem ser acessados pelo mecanismo de banco de dados Jet.

Se você estiver usando uma fonte de dados ISAM ou ODBC, vincular a tabela a um banco de dados Microsoft Jet (.mdb) e usa o DAO para abrir um "Recordset" baseado na tabela vinculada. Desde que o conjunto de registros pode ser editado diretamente via DAO, um formulário com base no conjunto de registros pode ser editado também. Para criar um conjunto de registros DAO que pode ser editado em um formulário do Microsoft Access, siga estas etapas.

cuidado : se você seguir as etapas neste exemplo, você modificar o banco de dados de exemplo Northwind.mdb. Convém fazer o backup do arquivo Northwind.mdb e seguir essas etapas numa cópia do banco de dados.

  1. Abra o banco de dados de exemplo Northwind.mdb.
  2. Abra o formulário produtos no modo de Design .
  3. Desmarque a propriedade do formulário OrigemDoRegistro , para que o formulário não diretamente está acoplado à tabela produtos .
  4. No menu Exibir , clique em código.
  5. No menu Ferramentas , clique em referências.
  6. Adicione uma referência para a Microsoft DAO 3.6 Object Library se ele não ainda estiver selecionado.
  7. Clique em OK para fechar a caixa de diálogo referências .
  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. Salve e feche o formulário produtos .
  10. Abra o formulário produtos no modo de formulário. Observe que o formulário é preenchido com êxito com dados do conjunto de registros DAO.
  11. Tente editar qualquer campo no formulário.

    Observe que você pode editar com êxito o formulário.

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo.

Mais Informações

Etapas para reproduzir o problema

cuidado : se você seguir as etapas neste exemplo, você modificar o banco de dados de exemplo Northwind.mdb. Convém fazer o backup do arquivo Northwind.mdb e seguir essas etapas numa cópia do banco de dados.

  1. Abra o banco de dados de exemplo Northwind.mdb.
  2. Abra o formulário produtos no modo de Design .
  3. Desmarque a propriedade do formulário OrigemDoRegistro , para que o formulário não diretamente está acoplado à tabela produtos .
  4. No menu Exibir , clique em código .
  5. No menu Ferramentas , clique em referências .
  6. Adicione uma referência para a Microsoft ActiveX Data Objects 2.1 Library se ele não ainda estiver selecionado.
  7. Clique em OK para fechar a caixa de diálogo referências .
  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. Salve e feche o formulário Produtos.
  10. Abra o formulário Produtos no modo de formulário.

    Observe que o formulário é preenchido com êxito com dados do conjunto de registros ADO.
  11. Tente editar qualquer campo no formulário.

    Observe que você não conseguir editar o formulário e que o Microsoft Access exibe o texto "Formulário é somente leitura" na barra de status.

Referências

Para obter mais informações sobre a propriedade Recordset do formulário, clique em Ajuda do Microsoft Access no menu Ajuda , digite a propriedade recordset formulário no Assistente do Office ou no Assistente de resposta e, em seguida, clique em Pesquisar para exibir o tópico.

Propriedades

ID do artigo: 227053 - Última revisão: quinta-feira, 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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