Моя инструкция вставки:
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:
... и следующую ошибку от 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)