CORRECÇÃO: Erro de #DELETED ao inserir registos com chave primária CHAR

Traduções de Artigos Traduções de Artigos
Artigo: 264766 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando insere um novo registo numa tabela ODBC ligada com um campo de texto de comprimento fixo (CHAR) como chave primária, #DELETED aparece no todos os campos no registo de novo.

Nota Se, em seguida, fechar e reabrir a tabela ligada, o registo recém-inserido aparece e está correctamente inserido.

Causa

Muitos controladores ODBC adicionar espaços para (ou "preencher") um campo CHAR quando o número de caracteres que são inseridos é inferior ao comprimento máximo do campo. Microsoft Jet 4.0 incorrectamente novamente lê o valor inserido, preenchido e compara-o valor original, unpadded. Uma vez que os dois valores são diferentes, Jet relatórios para o Microsoft Access que não é possível encontrar o registo recém-inserido.

Resolução

Para resolver este problema, instale o Jet 4.0 service pack mais recente. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
239114Como: Obter o Service Pack mais recente para o motor de base de dados Microsoft Jet 4.0

Como contornar

Utilize um campo texto de comprimento variável (VARCHAR) como chave primária da tabela.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo. Este problema foi corrigido no Jet 4.0 Service Pack 6 (SP6).

Mais Informação

Passos para reproduzir o comportamento

Pode reproduzir este problema ligando a uma base de dados DB2, Oracle ou o Microsoft SQL Server. O problema não parece ocorrer a menos que tenha pelo menos 60 ou mais registos na tabela ligada.

Se examinar um rastreio ODBC efectuado durante a operação de inserção, verá que insere e reselects correctamente o registo Jet e que não erros ocorrem no rastreio. O problema ocorre depois de Jet obtém o registo e tenta comparar o valor da chave reselected com o valor introduzido pelo utilizador.

Para reproduzir este comportamento, execute os seguintes passos:
  1. Execute o seguinte código de Microsoft Visual Basic para gerar a tabela de teste e registos:
    Sub GenerateTestTable()
    Dim conn As Object
    Dim i As Long, sql as String
       Set conn = CreateObject("adodb.connection")
       ' Change connection string to point to your SQL Server if needed.
       conn.Open "Provider=SQLOLEDB;Server=(Local);Database=Pubs;UID=sa;PWD=;"
       On Error Resume Next
       conn.Execute "drop table tmp_chartest"
       On Error GoTo 0
       sql = "create table tmp_chartest(f1 char(5) primary key, f2 char(10))"
       conn.Execute sql
        For i = 1 To 70
            sql = "insert into tmp_chartest (f1,f2) values ('"
            sql = sql & Format(i, "000") & "','XXXXXXXXXX')"
            conn.Execute sql
        Next i
        conn.Close
        Set conn = Nothing
    End Sub
    					
  2. Inicie o Microsoft Access 2000 e ligue à tabela tmp_chartest criado no passo anterior.
  3. Abra a tabela ligada recentemente e desloque-se para o último registo na tabela.
  4. Adicionar um novo registo com o campo F1 = 071 e campo F2 = XXXXXXXXXX.
  5. Separador desactivar o registo, e deverá ver #DELETED apresentados em todos os campos.

Propriedades

Artigo: 264766 - Última revisão: 24 de fevereiro de 2014 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Microsoft Access 2000 Service Pack 1
  • Microsoft Access 2002 Standard Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbbug kbdatabase kbfix kbjet KB264766 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: 264766

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