"Erro de tempo de execução '3709'" quando introduz uma grande quantidade de texto num campo Memo que contém um índice no Access

Moderado: requer competências básicas de macro, codificação e interoperabilidade.

Este artigo aplica-se a um ficheiro de base de dados do Microsoft Access (.mdb) ou a um ficheiro de base de dados do Microsoft Access (.accdb).

Sintomas

Numa base de dados do Microsoft Access, quando cria um campo Memo que inclui um índice ou cria um nome de campo que inclui o texto indexado automaticamente, não pode introduzir o texto que inclui mais de 3450 carateres no campo. Quando tenta introduzir mais texto no campo ou tenta editar os dados existentes, recebe a seguinte mensagem de erro:

Run-time error '3709':

The search key not found in any record.

Resolução

Se tiver de introduzir uma grande quantidade de texto no campo Memo, elimine o índice do campo Memo. Para tal, siga estes passos:

  1. Abra a tabela com o campo Memo na vista Estrutura.

  2. No Menu Ver, clique em Índices.

    Nota No Microsoft Office Access 2007, clique no separador Estrutura e, em seguida, clique em Índices no grupo Mostrar/Ocultar .

  3. Clique no índice do campo Memo e, em seguida, elimine-o.

Estado

A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados no início deste artigo.

Mais informações

Este comportamento não ocorre em versões do Microsoft Access antes do Microsoft Access 2000 porque não foi possível indexar os campos Memo no Jet 3.5 e anterior.

Passos para reproduzir o comportamento no Access 2003

  1. Numa nova base de dados, crie uma nova tabela com as seguintes propriedades e, em seguida, guarde-a como Tabela1:

    Table: Table1
    ------------------------
    Field Name: Id
    Data Type: AutoNumber
    Primary Key
    
    Field Name: MyCode
    Data Type: Memo
    
  2. Adicione o seguinte registo à tabela Table1:

    Id MyCode
    ------------------------------------
    1 This is the Memo test data
    
  3. Copie a seguinte instrução SQL, cole-a numa nova consulta na vista SQL e, em seguida, guarde a consulta como consulta1:

    UPDATE Table1 SET Table1.MyCode = [MyCode] & " " & [MyCode];

  4. Crie o módulo seguinte e, em seguida, guarde-o Módulo1:

    Sub TestMemoUpdate()
        Dim i As Integer
        Docmd.setwarnings false
        For i = 1 To 10
        Docmd.openquery "Query1"   
        Next i
        Docmd.setwarnings true
    End Sub
    
    
  5. Coloque o ponteiro para que esteja no procedimento. Prima F5 para executar o código.