« Erreur d’exécution '3709' » lorsque vous entrez une grande quantité de texte dans un champ Mémo qui contient un index dans Access

Modéré : nécessite des compétences de base en macro, en codage et en interopérabilité.

Cet article s’applique à un fichier de base de données Microsoft Access .MDB ou .ACCDB.

Symptômes

Dans une base de données Microsoft Access, lorsque vous créez un champ Mémo qui inclut un index ou que vous créez un nom de champ qui inclut le texte indexé automatiquement, vous ne pouvez pas entrer le texte qui comprend plus de 3450 caractères environ dans le champ. Lorsque vous essayez d’entrer plus de texte dans le champ ou de modifier les données existantes, le message d’erreur suivant s’affiche :

Run-time error '3709':

The search key not found in any record.

Résolution

Si vous devez entrer une grande quantité de texte dans le champ Mémo, supprimez l’index du champ Mémo. Pour ce faire, procédez comme suit :

  1. Ouvrez la table avec le champ Mémo en mode Création.

  2. Dans le menu Affichage, cliquez sur Index.

    Note Dans Microsoft Office Access 2007, cliquez sur l’onglet Création , puis sur Index dans le groupe Afficher/Masquer .

  3. Cliquez sur l’index du champ Mémo, puis supprimez-le.

Statut

Microsoft a confirmé qu’il s’agit d’un problème dans les produits Microsoft répertoriés au début de cet article.

Informations supplémentaires

Ce comportement ne se produit pas dans les versions de Microsoft Access antérieures à Microsoft Access 2000, car les champs Mémo n’ont pas pu être indexés dans Jet 3.5 et versions antérieures.

Étapes pour reproduire le comportement dans Access 2003

  1. Dans une nouvelle base de données, créez une table avec les propriétés suivantes, puis enregistrez-la sous Table1 :

    Table: Table1
    ------------------------
    Field Name: Id
    Data Type: AutoNumber
    Primary Key
    
    Field Name: MyCode
    Data Type: Memo
    
  2. Ajoutez l’enregistrement suivant à la table Table1 :

    Id MyCode
    ------------------------------------
    1 This is the Memo test data
    
  3. Copiez l’instruction SQL suivante, collez-la dans une nouvelle requête en mode SQL, puis enregistrez la requête en tant que query1 :

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

  4. Créez le module suivant, puis enregistrez-le Module1 :

    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. Placez votre pointeur afin qu’il se trouve dans la procédure. Appuyez sur F5 pour exécuter le code.