Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ленточная форма, логи
 
 автор: GODACH   (27.11.2009 в 16:37)   личное сообщение
 
 

Привет.
Подскажите возможно ли сделать так что б при извинении каких либо данных в ленточной форме, в одну из таблиц записывались логи, мол такой-то компьютер изменил такой-то параметр в таком-то часу.
Что б в результате можно было понять, кто и чего менял в этой ленточной форме.

  Ответить  
 
 автор: KrukVN   (27.11.2009 в 16:40)   личное сообщение
 
 

Вы только из ленточной формы ждете подвоха?
а ежели пользователь переключит вид формы?
или прямо в таблицу залезет?

p.s. в mdb с этим лучше не заморачиваться
с сервером проще - триггеры в помощь (в меру только:)

  Ответить  
 
 автор: GODACH   (27.11.2009 в 16:42)   личное сообщение
 
 

Неее, в данном случае это не важно, основным пользователем буду я :), тут главное что б я потом смог найти, что я тот меня тогдато, а дальше буду в почте искать причину, вить менять я буду только по письмам, ну и другие пользователи, они не умеют ничего, такого...

  Ответить  
 
 автор: KrukVN   (27.11.2009 в 16:59)   личное сообщение
42 Кб.
 
 

В случае с mdb делал так:
изменения отслеживал в событиях: Form_AfterInsert; Form_BeforeInsert; Form_BeforeUpdate; Form_AfterUpdate
далее долго и нудно писал (до класса руки так и не дошли)
в итоге получил результат: см. аттач

  Ответить  
 
 автор: час   (27.11.2009 в 17:03)   личное сообщение
 
 

можно када в ленточной форме мышкой щёлкнешь в этом событии и написать либо послать в функцию отсюда в ту, которая запишет всё, что там сейчас написано, но тада мышкой зря не щёлкай.
===================================================================
можно в каждом поле в событии до изменения послать в функцию логирования.....
===================================================================
можно изначально - при запуске задать форме значение только чтение - ДА
добавить на форму флажок - редактирование разрешить.
и када на флажке этом щёлкнешь форма либо переходит в режим только чтение или в режим не только чтение, в зависимости от того флажек=1 или = 0
и тада функция будет записывать данные если можно, и не будет их писать - ежели низззя.

  Ответить  
 
 автор: GODACH   (27.11.2009 в 17:26)   личное сообщение
 
 

На данный момент у меня в нужных мне столбцах уже вписаны такие события:
До обновления:
Private Sub GrafikCB_BeforeUpdate(Cancel As Integer)
Dim strMsg As String
strMsg = "Будем сохранять изменения?"
If MsgBox(strMsg, vbQuestion + vbYesNo) = vbNo Then       'отмена изменений
    Me.Undo
    
End If
End Sub


Получается мне куда-то сюда надо дописать, собитие которое буде происходить если пользователь подтвердить изменение...

  Ответить  
 
 автор: час   (27.11.2009 в 17:44)   личное сообщение
 
 


тута ...... куда тута?????

АААААААААААААА 'это я так написал неправильно.
Надо на click а не на befoupdate
================================
а ваще-то мне кажется лучше конечно
можно изначально - при запуске задать форме значение только чтение - ДА
добавить на форму флажок - редактирование разрешить.
и када на флажке этом щёлкнешь форма либо переходит в режим только чтение или в режим не только чтение, в зависимости от того флажек=1 или = 0
и тада функция будет записывать данные если можно, и не будет их писать - ежели низззя]

  Ответить  
 
 автор: GODACH   (27.11.2009 в 18:33)   личное сообщение
 
 

Спасибо, пробую так...

  Ответить  
 
 автор: час   (27.11.2009 в 18:44)   личное сообщение
 
 

остался вопрос куда присобачить функцию - видимо на клик поп полю........

  Ответить  
 
 автор: -)LKA(-   (30.11.2009 в 20:07)   личное сообщение
36 Кб.
 
 

Вот на сайте sql.ru есть очень интересный пример от Бенедикта, вот краткое описание:

На таблицу A(Id,fTxt,fDbl,fDat) накладывается условие проверки (CONSTRAINT CHECK), которое построено таким образом, что для каждой обрабатываемой им записи вызывается VBA-функция TriggerA(). Условие проверяется автоматически при изменении и добавлении записей в таблицу A. В функцию передаются параметрами новые (точнее, проверяемые) значения полей таблицы A. Функция открывает таблицу-журнал Audit_A и добавляет в неё запись, содержащую
# Время изменения (вызова функции Trigger_A()) в поле LogTime
# Имя компьютера в поле Audit_A.ComputerName
# Имя пользователя в поле Audit_A.UserName
# Значение ключевого поля A.Id в поле Audit_A.A_Id
# Новое значение поля A.fTxt в поле Audit_A.NewTxt
# Новое значение поля A.fDbl в поле Audit_A.NewDbl
# Новое значение поля A.fDat в поле Audit_A.NewDat
# Старое значение поля A.fTxt в поле Audit_A.OldTxt
# Старое значение поля A.fDbl в поле Audit_A.OldDbl
# Старое значение поля A.fDat в поле Audit_A.OldDat
Условие проверки накладывается запросом CreateTrigger, снимается запросом DropTrigger
Запросы Запрос1 и Запрос2 даны, чтобы показать, что условие проверки срабатывает (и, соответственно, изменения попадают в журнал) не только при ручном редактировании записей таблицы A, но и в результате выполнения запросов на обновление и добавление. Их (вместе и по отдельности) можно вызывать или не вызывать. Они имитируют запросы на обновление и добавление реальной БД.

P.S.
Таблица Audit_A скрыта Изменения фиксируются независимо где были сделаны, напрямую в таблице или через форму.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList