ошибка времени выполнения «3197». MS Access 2010 и SQL Server 2008R2.

У меня есть приложение, написанное в MS Access 2007-2010, а серверная часть представляет собой базу данных SQL.

После создания новой базы данных, когда я просматриваю записи из SQL в отчете Access, пытаюсь отредактировать или ввести новые результаты ввода с ошибкой времени выполнения 3197.

Конкретная ошибка гласит: эта запись была изменена другим пользователем с тех пор, как вы начали ее редактировать.

Затем у меня есть параметры «Копировать в буфер обмена» и «Удалить изменения», а «Сохранить запись» неактивно. Нажатие на изменения Drop приводит к ошибке:

«Ошибка выполнения «3197». Ядро базы данных Microsoft Access остановило процесс, поскольку вы и другой пользователь пытаетесь одновременно изменить одни и те же данные».

Затем я посмотрел в SQL и запросил базу данных с помощью EXEC sp_who2 'Active', и я вижу, что имя пользователя, которое я использую для SQL, является RUNNABLE, в то время как пользователь, используемый приложением Access (закодированный в Access VBA), ПРИОСТАНОВЛЕН (команда, которую он приостановлено на SELECT).

У меня есть другие базы данных, которые построены таким же образом и работают без проблем. Я проверил sp_who2 в рабочей базе данных, когда она работает с Access, и пользователь, который ПРИОСТАНОВЛЕН для «проблемной» базы данных, спит с этой.

Я проверил разрешения для обеих баз данных и проверил разрешения для пользователей в разделе «Безопасность» -> «Входы в систему» ​​и не вижу ничего, что я мог бы пометить как проблему (может быть, кто-то еще может?).

Не уверен, почему это происходит и почему база данных заблокирована пользователем SQL и не позволяет пользователю доступа обновлять соответствующие записи.

Кто-нибудь может пролить свет на этот вопрос?

Спасибо.


person mikimr    schedule 01.08.2012    source источник
comment
Вы уплотнили, исправили и декомпилировали базу данных MS Access? Используете ли вы какие-либо необычные форматы даты в SQL Server? Вы говорите, что с другими базами данных Access все в порядке, нормально ли они связаны с теми же таблицами, которые вызывают проблему? У вас есть проблема со свежей базой данных и связанными таблицами?   -  person Fionnuala    schedule 01.08.2012
comment
Новая база данных имеет ту же структуру, что и другие базы данных. Единственными полями, которые я изменил, была пара varchars, которые я увеличил, чтобы вместить весь текст. Что вы подразумеваете под необычными форматами даты? Те же форматы даты используются другими базами данных без проблем. Сообщение об ошибке появляется (из того, что я тестировал до сих пор), когда я устанавливаю флажок в Access, который соответствует битовому типу данных в SQL Server. Сначала это битовое поле было NULL, но ошибка сохраняется даже после того, как я заполнил это поле 0.   -  person mikimr    schedule 01.08.2012
comment
Означает ли это msgroups.net/microsoft.public.access. кодирование форм/ помочь?   -  person Fionnuala    schedule 01.08.2012
comment
Спасибо, я изменил все битовые типы данных на smallint, и это сработало.   -  person mikimr    schedule 02.08.2012


Ответы (3)


Как прокомментировал Рему, изменение всех типов битовых данных на smallint и заполнение 0 там, где Null сделал свое дело. Мне не нужно было менять 1 на -1, так как мои поля должны были быть в исходном состоянии без отметки (= 0).

person mikimr    schedule 02.08.2012
comment
Спасибо, у меня была аналогичная проблема - у меня были битовые поля, которые были нулевыми (не 0), и это вызвало у меня ту же ошибку. - person enderland; 28.01.2014

Как и было предложено, я обновил данные в поле с битовым типом данных с нуля на 0, а также изменил тип данных на int. Это решило проблему.

person CarlMal    schedule 02.10.2017

У меня была такая же проблема,

    sql2 = "Select * from voeding where id = " & ID_Voeding_Site.Value & ""
    Set rst2 = bbase.OpenRecordset(sql2)
        rst2.Edit
        rst2.Fields("verwerkt").Value = 1
        rst2.Fields("printdatum").Value = Date
        rst2.Update
        rst2.Close

Застрял на .update. Я изменил его на:

    sql2 = "Select Verwerkt, Printdatum from voeding where id = " & ID_Voeding_Site.Value & ""
    Set rst2 = bbase.OpenRecordset(sql2)
        rst2.Edit
        rst2.Fields("verwerkt").Value = 1
        rst2.Fields("printdatum").Value = Date
        rst2.Update
        rst2.Close

Больше никаких проблем не появилось. Надеюсь, это поможет другим.

person Robin DMS    schedule 23.03.2021