ID do artigo: 208799 - Última revisão: quinta-feira, 23 de junho de 2005 - Revisão: 3.0

ACC2000: SQL novos registros aparecem excluídos até Recordset reaberto

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
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).

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Quando você adiciona um registro a uma tabela SQL usando o Visual Basic for Applications, se o campo da tabela índice exclusivo tem um valor padrão, e você não atribuir um valor nesse campo, o novo registro aparece excluído até que você abra novamente a tabela SQL. Se você tentar obter um valor do registro novo, você receber a seguinte mensagem de erro:
Erro em tempo de execução '3167'

Registro é excluído.

Resolução

Para resolver esse comportamento, quando você abre a tabela SQL usando código do Visual Basic, inclua a opção dbSeeChanges , como no exemplo a seguir:
Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)
				
a opção dbSeeChanges garante que qualquer recém-adicionados registros que contêm um valor padrão no campo índice exclusivo estão disponíveis no conjunto de registros atual.

Mais Informações

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.

Etapas para reproduzir o problema

Observação : O código de exemplo neste artigo usa o Microsoft Data Access Objects. Para que este código seja executado corretamente, você deve fazer referência a Microsoft DAO 3.6 Object Library. Para fazer isso, clique em referências no menu Ferramentas no Editor do Visual Basic e veja que a caixa de seleção Microsoft DAO 3.6 Object Library está selecionada.

  1. Crie um módulo e digite a seguinte linha na seção declarações caso ainda não estiver lá:
    opção EXPLICIT
  2. Digite o seguinte procedimento:
    Function TestSQLData()
    
       Dim db As DAO.Database, rs As DAO.Recordset
       Dim idx, td
       Dim cmd As String
    
       ' Delete TestTable if it exists on the SQL server.
       
       'Insert your database name, user ID, password (if any), and dsn
       'to point to an ODBC data source.
       Set db = OpenDatabase("<MyDatabase>", False, False, _
       "ODBC, Database = <MyDatabase>, UID = <userid>, PWD = <password>, dsn = <MyDSN>")
       cmd = "if exists (select * from sysobjects where" _
          & " id = object_id('dbo.TestTable'))"
       cmd = cmd & " drop table TestTable"
       db.Execute cmd, dbSQLPassThrough
    
       ' Create TestTable with one field on SQL server.
       Set td = db.CreateTableDef("TestTable")
       td.Fields.Append td.CreateField("Int", dbInteger)
       td.Fields.Append td.CreateField("String", dbText, 50)
       db.TableDefs.Append td
    
       Set idx = td.CreateIndex("MyIdx")
       idx.Unique = True
       idx.Fields.Append idx.CreateField("Int")
       td.Indexes.Append idx
    
       cmd = "create Default TestDef3 as 100"
       db.Execute cmd, dbSQLPassThrough
    
       cmd = "sp_bindefault TestDef3, 'TestTable.Int'"
       db.Execute cmd, dbSQLPassThrough
    
       ' Open table, add a record, and then obtain values.
       Set rs = db.OpenRecordset("TestTable")
       rs.AddNew
       rs!String = "Trial"
       rs.Update
    
       Debug.Print "RecordCount = " & rs.RecordCount
       rs.MoveFirst
       Debug.Print "String is " & rs("String")
       Debug.Print "Int is " & rs("Int")
       rs.Close
    
    End Function
    					
  3. Para testar essa função, digite a seguinte linha na janela Verificação imediata e, em seguida, pressione ENTER:
    ? TestSQLData()
    Observe que ocorre o erro 3167 em tempo de execução.

A informação contida neste artigo aplica-se a:
  • Microsoft Access 2000 Standard Edition
Palavras-chave: 
kbmt kberrmsg kbprb kbusage KB208799 KbMtpt
Tradução automáticaTraduçã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: 208799  (http://support.microsoft.com/kb/208799/en-us/ )