Связанная запись “DB Доступа была изменена другим пользователем”

NSDate *newDate = [theDate dateByAddingTimeInterval:-3600*4];

Ссылка на документацию .


NSDate *newDate = [[[NSDate alloc] initWithTimeInterval:-3600*4
                                              sinceDate:theDate]] autorelease];

Ссылка на документацию .

15
задан ChristianLinnell 9 June 2009 в 23:54
поделиться

4 ответа

Взгляните на свою связанную таблицу в SQL Server 2000. Есть ли в ней поле, содержащее битовый тип данных? Access выдаст вам это сообщение об ошибке в сценарии связанной таблицы, если у вас есть битовое поле , которое не имеет значения по умолчанию .

Возможно, в вашем случае дело и не в том, но я испытал то же самое в базе данных Access 2007 и отследил проблему в битовом поле без значения по умолчанию.

44
ответ дан 30 November 2019 в 23:56
поделиться

Я видел такое поведение раньше, и это исправило его для меня:

Попробуйте добавить поле TimeStamp в таблицу (просто добавьте это поле и обновите связанные таблицы. Вам не нужно заполнять это поле какими-либо данными).

10
ответ дан 30 November 2019 в 23:56
поделиться

Ошибка, которую вы получаете, обычно возникает, когда:

  1. вы редактируете запись в форме, а форма неактуальна (т. Е. Изменения не сохраняются),

И

  1. вы запускаете код, который использует DAO или ADO для запуска SQL для обновления той же записи.

Для Jet это два «пользователя», потому что это две разные операции редактирования. Базовая таблица была обновлена ​​обновлением SQL, а данные в буфере формы теперь устарели.

Обычное решение - принудительное сохранение перед запуском обновления SQL:

  If Me.Dirty Then
     Me.Dirty = False
  End If
  [run your SQL update here]

Но если вы используете форм для редактирования записи, вам следует выполнять все обновления в форме, а не прибегать к SQL для выполнения обновления.

Ситуация, которую вы описываете с созданием собственной последовательности, должна выполняться следующим образом:

  1. user нажимает кнопку NEW RECORD.

  2. вычислить следующее значение последовательности и сохранить его в переменной.

  3. вставить новую запись с этим значением последовательности с помощью SQL INSERT.

4a. если ваша форма привязана ко всем записям в таблице, запросите форму редактирования данных повторно (при условии, что кнопка НОВАЯ ЗАПИСЬ находится в форме, в которой пользователи редактируют данные), и используйте навигацию по закладкам, чтобы перейти к новой записи со значением последовательности, которое вы сохранили в переменной на шаге 2.

4b. Если ваша форма не привязана ко всем записям (чего не должно быть, если это хорошо спроектированная база данных), вы просто измените источник записей формы, чтобы загрузить только новую запись.

Другая альтернатива - избежать SQL INSERT и повторного запроса (или сброса источника записей) и просто добавить новую запись в существующую форму, установить в поле последовательности новое значение и немедленно сохранить запись.

7
ответ дан 30 November 2019 в 23:56
поделиться

Я бы отслеживал, заменил ли пользователь новый customer_id своим собственным значением. Если они этого не сделали, то ваше приложение должно иметь возможность проверять наличие дубликата прямо перед сохранением и просто снова увеличивать его самостоятельно, и пользователь не возражал против использования значения по умолчанию. Может быть, даже какой-то индикатор для пользователя, что вам нужно было автоматически выбрать другое значение.

1
ответ дан 30 November 2019 в 23:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: