"Ошибка времени выполнения "3709", когда вы вводите большой объем текста в поле Memo, которое содержит индекс в Access

Средний. Требуются базовые навыки макроса, программирования и взаимодействия.

Эта статья применима к файлам баз данных Microsoft Access (.mdb) или (.accdb).

Симптомы

В базе данных Microsoft Access при создании поля Memo, содержащего индекс, или при создании имени поля, включающего автоматически индексированный текст, невозможно ввести в поле текст, содержащий более 3450 символов. При попытке ввести дополнительный текст в поле или изменить существующие данные появляется следующее сообщение об ошибке:

Run-time error '3709':

The search key not found in any record.

Разрешение

Если необходимо ввести большой объем текста в поле Memo, удалите индекс для поля Memo. Для этого выполните указанные ниже действия.

  1. Откройте таблицу с полем Memo в режиме конструктора.

  2. В меню Вид щелкните Индексы.

    Примечание В Microsoft Office Access 2007 откройте вкладку Конструктор , а затем щелкните Индексы в группе Показать и скрыть .

  3. Щелкните индекс для поля Memo и удалите его.

Состояние

Корпорация Майкрософт подтвердила, что это проблема в продуктах Майкрософт, перечисленных в начале этой статьи.

Дополнительная информация

Это не происходит в версиях Microsoft Access до Microsoft Access 2000, так как поля Memo не удалось проиндексировать в Jet 3.5 и более ранних версиях.

Действия по воспроизведению поведения в Access 2003

  1. В новой базе данных создайте таблицу со следующими свойствами, а затем сохраните ее как Table1:

    Table: Table1
    ------------------------
    Field Name: Id
    Data Type: AutoNumber
    Primary Key
    
    Field Name: MyCode
    Data Type: Memo
    
  2. Добавьте следующую запись в таблицу Table1:

    Id MyCode
    ------------------------------------
    1 This is the Memo test data
    
  3. Скопируйте следующую инструкцию SQL, вставьте ее в новый запрос в представлении SQL, а затем сохраните запрос как query1:

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

  4. Создайте следующий модуль, а затем сохраните его 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. Поместите указатель так, чтобы он был в процедуре. Нажмите клавишу F5, чтобы запустить код.