powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Другой пользователь изменил запись...
12 сообщений из 12, страница 1 из 1
Другой пользователь изменил запись...
    #32498892
Фотография kkv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, этот вопрос здесь уже рассматривался, но я не нашел. Если кто знает, то скиньте ссылку или подскажите.

В таблице на SQL Server на каждый update записи отрабатывает стандартный триггер, т.е. происходит заполнение полей user_modify и date_modify. Клиент работает на Access'е (связанные таблицы через ODBC файловый DSN). Если встать на запись в таблице и изменить ее, затем перейти на любую другую а потом снова вернуться, то при первой же попытке изменения записи выскакивает стандартное сообщение: "Другой пользователь изменил запись". Сообщение не критично, пользователь просто нажимает Ok и продолжает работать - дальше все корректно. Просто пользователей это очень сильно раздражает. Причина понятна - триггер отработал, значения полей user_modify и date_modify изменились, но Access об этом еще ничего "не знает" - запись пока еще не обновлена. Подскажите пожалуйста, как это можно исправить.
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32498908
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отмена стандартного предупреждения...Как?
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32498984
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле тут небольшой баг.
Access почему-то так реагирует
Если в триггере присутствуют "прямые" ссылки
на таблицы inserted или deleted
в теле запроса на UPDATE

Для того чтобы уйти от этого
нужно отделить обращение к этим таблицам от основного тела запроса
например

Юзать их через подзапрос

DECLARE @CurUserName varchar(20)
DECLARE @CurDt smalldatetime,@UP_ID int
SET @CurUserName=SUBSTRING(SYSTEM_USER, CHARINDEX('\', SYSTEM_USER) + 1, 20)
SET @CurDt=GetDate()
SELECT @UP_ID=[ID] FROM UP_Current_v
UPDATE dbo.PL_Plateg
SET KtoIzm = @CurUserName, KogdaIzm = @CurDt,UP_ID_Izm=@UP_ID
WHERE ID IN (SELECT ID FROM inserted)

Или сначала слить их содержимое в временную таблицу и дальше использовать ее


SELECT inserted.ID,inserted.Status , deleted.Status AS OldStatus,inserted.AO_ID INTO #TmpInsDel_tbl FROM inserted INNER JOIN deleted ON inserted.ID=deleted.ID
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32499100
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а set nocount on в начале триггера не помогает?
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32499128
Фотография kkv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не помогает! Триггер переписал, set nocount on сделал... Все равно, аксесу это по барабану. Как выдавал мессагу, так и выдает... Может, в триггере что-то не так, хотя сам триггер отрабатывает корректно...
------------------------------
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
set nocount on
go

ALTER trigger tbl_акты_protokol_update
on tbl_акты
for update
as


declare @user_name varchar(20)
declare @date_change smalldatetime
declare @id int

set @user_name = substring (system_user, charindex('\', system_user) + 1, 20)
set @date_change = getdate()
select @id = id_акт FROM tbl_акты

update tbl_акты
set
_user_change = @user_name,
_date_change = @date_change
where id_акт in (select id_акт from inserted)


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
-------------------------
Но в принципе и старый триггер работал хорошо. Проблема-то в другом - акссес "не видит" в связанной таблице результатов отработки этого триггера и осуществляет принудительное обновление записи при выскакивании мессаги.
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32499168
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так?

ALTER trigger tbl_акты_protokol_update
on tbl_акты
for update
as
set nocount on



declare @user_name varchar(20)
declare @date_change smalldatetime
declare @id int

set @user_name = substring (system_user, charindex('\', system_user) + 1, 20)
set @date_change = getdate()
select @id = id_акт FROM tbl_акты

update tbl_акты
set
_user_change = @user_name,
_date_change = @date_change
where id_акт in (select id_акт from inserted)
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32499179
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще юзер наверное редактирует данные наверное не в таблице а все таки в табличной форме а там наверняка указана строка синхронизации ?
да?
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32499197
Фотография kkv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И так тоже не помогает... Короче, триггер на SQL Server тут совершенно не при чем. Мне бы как-нибудь на клиенте это сделать... Пробовал на обработке события Error формы написать, как мне посоветовали. Быстренько начиркал:
==============
Private Sub Form_Error(DataErr As Integer, Response As Integer)
If DataErr = 7787 Then
Application.SetOption "Error Trapping", 2 'Break On Unhandled Errors
End If
End Sub
==============
Все равно не помогает.
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32499280
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще отключить триггер пробывал?
Может дело не в нем?
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32499456
Фотография kkv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще отключить триггер пробывал?
Может дело не в нем?
---------------------
А в чем же еще? Когда триггера не было, все работало. Да нет, тут все очень хорошо можно проследить прямо на таблице: изменил запись, а поля _date_change и _user_change "на ходу" не обновились, как это можно наблюдать в Enterprise Manager. Потом, естестественно, когда я пытаюсь что-то поменять в этой же записи, Access вдруг "вспоминает" об этих изменениях и выдает мессагу, после которой значения этих полей обновляются. Вот, собственно и все. Может, я как-то не так обработку ошибки написал?
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32500167
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм у меня таких проблемм нет правда работаю с ADP
Может сделать рефреш лишний раз

Из обходных решений в голову приходит только
сделать отдельную таблицу для user_modify и date_modify
или изменять их с клиента по событию формы
...
Рейтинг: 0 / 0
Другой пользователь изменил запись...
    #32500564
Фотография kkv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может сделать рефреш лишний раз
Пробовал - помогает как-то уж очень криво, т.е. при включенном пользователем фильтре уже не прокатывает, а без фильтра все Ок... Короче, сейчас я просто отключил (до лучших времен или пока что-то нормальное в голову не придет) это сообщение в обрабочике ошибки на форме:
Response = acDataErrContinue
Ошибка перестала появляться, но зато теперь есть риск затереть все, что заполнено в поле. На уровне пользователя это выглядит так: меняем запись, переходим на другую (как правило для того, чтобы оттуда что-то скопировать), затем возвращаемся и как только пытаемся ввести 1-й символ в поле, всё поле выделяется (символ при этом не вводится - ведь отработал рефреш записи после отключенного сообщения об ошибке), а затем, если автоматически продолжить ввод, т.е. при вводе 2-го символа - все, разумеется затирается. Т.е. надо щелкнуть мышкой в нужном месте и продолжать работать. Как ни странно, но этот супер-дибильно-кривой способ пользователи посчитали лучше, чем периодическое выскакивание мессаги. :-) Попросили оставить этот вариант... Хотя по моему, уж лучше стандартное сообщение, чем такие "маленькие хитрости" экранного интерфейса. На всякий случай старый вариант держу в запасе.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Другой пользователь изменил запись...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]