Почему MS Access 2007 не разрешает вставку строки, но разрешает ее при следующей попытке вставки?

Моя инструкция вставки:

INSERT INTO myTable (inst_id,user_id,app_id,type,accessed_on)
VALUES (3264,2580,'MyApp','Renew',Now);

... где все значения отформатированы правильно. В таблице есть указанные выше поля и одно другое, длинное ключевое поле с автоматическим увеличением int. Внешними ключами являются 'inst_id', 'user_id' и 'app_id'.

Я получаю эту ошибку от Access: access error

... и следующую ошибку от VS 2005, когда он выходит из строя:

Система .Data.OleDb.OleDbException: изменения, которые вы запросили в таблице. не были успешными, потому что они создавать повторяющиеся значения в индексе, первичный ключ или отношение. + Изменить данные в поле или полях, которые содержат повторяющиеся данные, удалите index или переопределите индекс, чтобы разрешить дублируйте записи и попробуйте еще раз.

При выполнении этого запроса на вставку я могу заглянуть в базу данных и увидеть, что каждое из значений внешнего ключа существует в соответствующих таблицах и существует уже несколько месяцев (для конкретного примера, который я использую). Эти поля также настроены так, что у меня могут быть дубликаты, так что проблема не в этом. Вызовы такого рода в других таблицах отлично работают. Мне не нужно указывать значение ключа автоинкремента в запросе вставки, он добавляет его автоматически (как и должно).

Странно то, что если я сделаю это в своем коде:

try
{
    //Execute the query here...
}
catch
{
    //Execute the same query again
}

.. .или если я просто попробую выполнить это в Access дважды, это сработает.

Кто-нибудь сталкивался с этим раньше? Опять же, этот тип вставки работает для других таблиц, все внешние ключи присутствуют в соответствующих таблицах, первичный ключ этой таблицы установлен как «Автоинкремент», и все поля (кроме поля первичного ключа, конечно) настроены так, чтобы разрешить дублирование.

Есть идеи?

РЕДАКТИРОВАТЬ: Самый большой ключ перед вставкой: 343085 . Самый большой ключ после вставки: 343086 . Формат:

id: AutoNumber (Field Size=Long Interger, New Values=Increment, Indexed=Yes - No Duplicates)

inst_id: Number (Field Size=Long Interger, Required=Yes, Indexed=Yes - Duplicates OK)

user_id: Number (Field Size=Long Interger, Required=Yes, Indexed=Yes - Duplicates OK)

app_id: Text (Field Size=255, Required=Yes, Indexed=Yes - Duplicates OK)

type: Text (Field Size=50, Required=Yes, Indexed=No)

accessed_on: Date/Time (Default Value=Now(), Required=Yes, Indexed=No)
8
задан Mike Webb 7 March 2011 в 23:19
поделиться