2013-04-23 2 views
1

У меня есть таблица с ~ 400 000 строк. Я пытаюсь добавить поле autonumber. Когда я попытался добавить поле с помощью Design View, я получил сообщение об ошибке: File sharing lock count exceeded. Increase MaxLocksPerFile registry entry.«Системный ресурс превышен» при добавлении автономера

Я не хочу, чтобы сделать постоянное изменение реестра, поэтому я попытался следующий VBA:

Sub addAuto() 

DAO.DBEngine.SetOption dbMaxLocksPerFile, 1000000 
CurrentDb.Execute "ALTER Table large_data add column rowID AUTOINCREMENT", dbFailOnError 

End Sub 

Это дало мне следующее сообщение об ошибке:

Run-time error '3035': System resource exceeded

Что я должен сделать, чтобы добавить поле Autonumber?

+0

Вы пытались открыть базу данных в режиме «Эксклюзив»? Это может обойти любую блокировку механизма базы данных (по-видимому), пытающуюся сделать. –

ответ

2

Вы можете избежать этой ошибки, отбросив строки от large_data, прежде чем пытаться добавить поле rowID. Затем вы должны добавить данные обратно.

  1. Сделайте копию своего файла db.
  2. Пустой large_data
  3. Compact the db.
  4. Добавить поле autonumber в таблицу.
  5. Ссылка на large_table в копии db.
  6. Запустите «append query», чтобы добавить данные из связанной таблицы в новую версию large_table.

Что-то вроде ...

INSERT INTO large_table (
    fld1, 
    fld2, 
    fld3 
    ) 
SELECT 
    fld1, 
    fld2, 
    fld3 
FROM linked_table; 

Включите имена всех полей, кроме rowID поля в этом запросе. Двигатель db позаботится о значениях autonumber.

+0

Я попробую. В таблице есть 160 полей (я знаю, я знаю), поэтому мне кажется, что мне нужно будет создать запрос append в VBA, перейдя по полям в наборе записей таблицы, или есть другой способ? – sigil

+0

Почему вы не можете использовать конструктор запросов? Разве это не позволяет вам выбрать 160 полей? – HansUp

Смежные вопросы