Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2013, 10:50   #31
Myhaylo
Форумчанин
 
Регистрация: 19.07.2012
Сообщений: 520
По умолчанию

Конечно, можно.
Окупант, руки прочь от Украины!!! Слава Героям!
Myhaylo вне форума Ответить с цитированием
Старый 15.08.2013, 14:29   #32
Myhaylo
Форумчанин
 
Регистрация: 19.07.2012
Сообщений: 520
По умолчанию

Как я понимаю, теперь в "ЖурналИзменений" ничего не пишется...
О каких новой и старой записи идёт речь, если записывается только 1 значение (информация из одного поля)?
Окупант, руки прочь от Украины!!! Слава Героям!
Myhaylo вне форума Ответить с цитированием
Старый 15.08.2013, 15:02   #33
duh_si
Форумчанин
 
Регистрация: 18.04.2013
Сообщений: 118
По умолчанию

Цитата:
Сообщение от Myhaylo Посмотреть сообщение
Как я понимаю, теперь в "ЖурналИзменений" ничего не пишется...
Нет не пишется, я думаю все в одну записывать tblLogDoc
Цитата:
О каких новой и старой записи идёт речь, если записывается только 1 значение (информация из одного поля)?
Вот смотрите, Измените на форме Заказ один любой контрол(в комбоБоксе) например измените одно на другое и закройте Заказ один,.. теперь посмотрите в таблице tblLogDoc там сделалась запись, что на что изменилось
duh_si вне форума Ответить с цитированием
Старый 15.08.2013, 15:26   #34
duh_si
Форумчанин
 
Регистрация: 18.04.2013
Сообщений: 118
По умолчанию

А проблема в том что если изменить сначала один комбо, а потом например дату то запишется только одна дата, а нужно что бы из обоих объектов измененние зафиксировались

Последний раз редактировалось duh_si; 15.08.2013 в 15:29.
duh_si вне форума Ответить с цитированием
Старый 15.08.2013, 17:34   #35
Myhaylo
Форумчанин
 
Регистрация: 19.07.2012
Сообщений: 520
По умолчанию

А куда Вы это хотите записать, если там только одно поле?
К тому же, не указывается имя поля, в котором были выполнены изменения...
Записывается всегда последнее, потому что в setOldAfter() запись производится всегда для текущей строки (см. предложение WHERE):

"SELECT * FROM tblLogDoc WHERE LogDocID=" & ID

Если убрать WHERE, то тогда можно записывать сколько угодно исправлений, но каждое, по-прежнему, будет отдельной строкой (записью)... Так что структуру журнала нужно бы переделать...
Окупант, руки прочь от Украины!!! Слава Героям!
Myhaylo вне форума Ответить с цитированием
Старый 15.08.2013, 18:38   #36
duh_si
Форумчанин
 
Регистрация: 18.04.2013
Сообщений: 118
По умолчанию

Цитата:
Сообщение от Myhaylo Посмотреть сообщение
А куда Вы это хотите записать, если там только одно поле?
Цитата:
К тому же, не указывается имя поля, в котором были выполнены изменения...
я просто не знаю как имя объекта записать в котором произошло изменение
Цитата:
Записывается всегда последнее, потому что в setOldAfter() запись производится всегда для текущей строки (см. предложение WHERE):

"SELECT * FROM tblLogDoc WHERE LogDocID=" & ID

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


Цитата:
Так что структуру журнала нужно бы переделать...
Как вы предлагаете переделать?

Я просто в замешательстве уже..
Или сделать чтобы,. заполнять журналИзменений в него вносить Дату, имя контрола, старое и новое изменение, и соединить (вложением?) с tblLogDoc и в итоге получим: На какой форме пользователь был, что делал и все записи будут в своих строках...
duh_si вне форума Ответить с цитированием
Старый 16.08.2013, 14:55   #37
duh_si
Форумчанин
 
Регистрация: 18.04.2013
Сообщений: 118
По умолчанию

Убрал условие WHERE как вы сказали, делает он не сколько угодно записей изменений, а только 2 и то не всегда
Цитата:
Код:
Public Function setOldAfter()
'On Error Resume Next
Dim ol As Recordset
Dim ct As Control, ov As String, nv As String
Set ct = Screen.ActiveControl
ov = ct.OldValue
nv = ct.value
      'MsgBox ov & " " & nv
Set ol = CurrentDb.OpenRecordset("SELECT * FROM tblLogDoc", dbOpenDynaset) 'WHERE LogDocID=" & ID, dbOpenDynaset)
    With ol
        .AddNew
        !Old_value = ov
        !new_value = nv
        .Update
    End With
ol.Close
End Function
Цитата:
Вот так можно перебрать все элементы управления в форме:
Код:

Dim c As Control
For Each c In Me.Controls
If Nz(c.OldValue,0)<>Nz(c,0) then 'если старое и новое значения - разные
'выполняем запись c.OldValue
End If
Next c
Myhaylo а куда нужно влепить этот код в мой( все уже перетыкал)
duh_si вне форума Ответить с цитированием
Старый 19.08.2013, 14:19   #38
duh_si
Форумчанин
 
Регистрация: 18.04.2013
Сообщений: 118
По умолчанию

Цитата:
Так что структуру журнала нужно бы переделать...
Myhaylo подскажите пожалуйста , как вы считаете ее нужно сделать, чтобы все правильно было организованно
duh_si вне форума Ответить с цитированием
Старый 19.08.2013, 16:27   #39
Myhaylo
Форумчанин
 
Регистрация: 19.07.2012
Сообщений: 520
По умолчанию

Да я ещё в процессе (просто не получается, а делать сложно - не хочется)...
Окупант, руки прочь от Украины!!! Слава Героям!
Myhaylo вне форума Ответить с цитированием
Старый 20.08.2013, 15:04   #40
duh_si
Форумчанин
 
Регистрация: 18.04.2013
Сообщений: 118
По умолчанию

Решил таки делать записи изменения в таблице ЖурналИзменений, (а запросом соединю с tblLogDoс будет думаю наглядно, а в принципе можно в журнал и название формы вставить и тогда надобность в tblLogDoc вообще отпадет)
Делаю это таким образом:
Код:
Public Function setOldBefore()
'On Error Resume Next
Dim ol As Recordset
Dim ct As Control, ov As String, nv As String

Set ct = Screen.ActiveControl
Obj = Screen.ActiveControl.Name

ov = ct.OldValue
nv = ct.value
      'MsgBox ov & " " & nv
Set ol = CurrentDb.OpenRecordset("ЖурналИзменений", dbOpenDynaset, dbAppendOnly)
    With ol
        .AddNew
        !Old_value = ov
        !new_value = nv
        !Дата = Now()
        !Name_object = Obj
        !ФИО = CurrentUser()
        !НомерЗаписи = ?

        .Update
    End With
ol.Close
End Function
Есть одна проблема:
По идеи мы должны знать какая именно запись была изменена, т.е нужно еще и номер записи сохранить (ниже описал вариан, если конечно возможно такое)

Myhaylo можете посмотреть На форме "Заказ один" поле №Заказа
Там нумерация делается сквозным годом (зависит от выбора Дата заказа(там и код)), можете ее сделать не зависищей от года т.е чтобы нумерация шла от 0 и до пока программу не "удалят"(я пытался переделать, ничего не получилось у меня)..

И вот к чем я это...номер полученный в поле № Заказа(Этот номер хранится в таблице Заказ...) брать и записывать в ЖурналИзменений вместе с изменениями который были сделаны..И таким образом мы будем знать где призошли изменения т.е в каком документе,...Такое возможно сделать?

Последний раз редактировалось duh_si; 20.08.2013 в 15:10.
duh_si вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access 2010 Alex A Microsoft Office Access 4 19.07.2013 15:09
Delphi mysql trigger - как правильно писать? Прошу пример iskurt Помощь студентам 7 03.06.2012 19:03
VB 2010 + Access 2010 iEnRJ Помощь студентам 1 03.03.2012 14:28
Из Access 2010 в Access 2007 Radzhab Microsoft Office Access 3 10.05.2011 22:13
Mysql + trigger crazy horse SQL, базы данных 1 17.03.2010 09:34