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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2016, 18:14   #1
sharamet91
 
Регистрация: 28.07.2016
Сообщений: 7
Радость Учет изменений

есть таблица "Сотрудники" и ей аналогичная "Сотрудники_история". Записи добавляются через форму.

Сначала, на событии формы "Текущая запись" мы собираем в массив текущие значения полей.

Затем при нажатии кнопки "сохранить" проверяем, если были внесены изменения (Me.Dirty = True), то в открытый рекордсет таблицы "Сотрудники_история" добавляем строку, куда переносим ВСЕ данные, ранее собранные в массив, и сохраняем запись.


подскажите пожалуйста, как сделать чтобы в таблицу добавлялись уже измененные значения, а не старые. как правильно прописать recordset? получается нужно, чтобы после проверки он собрал новые значения


вот сам код:


Option Compare Database
Dim Rec()

Private Sub Form_Current()
ReDim Rec(Me.Recordset.Fields.Count - 1)
For i = 0 To UBound(Rec)
Rec(i) = Me.Recordset.Fields(i)
Next

End Sub

Private Sub Сохранить_Click()
Dim UserName As String
UserName = Environ("USERNAME")
If Me.Dirty Then
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Сотрудники _история", dbOpenDynaset)
rst.AddNew
For i = 0 To UBound(Rec)
rst.Fields(i) = Rec(i)
Next i
rst.Update
End If
Me!ДатаИзменения = Date + Time
Me!Автор = UserName
DoCmd.RunCommand acCmdSaveRecord
ReDim Rec(Me.Recordset.Fields.Count - 1)
For i = 0 To UBound(Rec)
Rec(i) = Me.Recordset.Fields(i)
Next
End Sub

заранее благодарю)

Последний раз редактировалось sharamet91; 28.07.2016 в 18:15. Причина: уточнение
sharamet91 вне форума Ответить с цитированием
Старый 28.07.2016, 19:13   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Прикрепите тестовую базу с формой и таблицами.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 29.07.2016, 09:57   #3
sharamet91
 
Регистрация: 28.07.2016
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Прикрепите тестовую базу с формой и таблицами.
вот... и может еще подскажите как сделать корректную работу при добавлении новых записей?
Вложения
Тип файла: rar бд.rar (73.8 Кб, 20 просмотров)
sharamet91 вне форума Ответить с цитированием
Старый 29.07.2016, 12:58   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

так пробовали?
Код:
Private Sub Form_Current()
    Me.Refresh
    ReDim Rec(Me.Recordset.Fields.Count - 1)
    For i = LBound(Rec) To UBound(Rec)
        Rec(i) = Me.Recordset.Fields(i)
    Next
End Sub

Private Sub Сохранить_Click()
Dim UserName As String
Dim rst As DAO.Recordset
    UserName = Environ("USERNAME")
    If Me.Dirty Then
        Me.SetFocus
        Call Form_Current
        Set rst = CurrentDb.OpenRecordset("Сотрудники_история", dbOpenDynaset)
        rst.AddNew
      
        
        For i = LBound(Rec) To UBound(Rec)
          rst.Fields(i) = Rec(i)
        Next i
          rst.Update
    End If
    Me!ДатаИзменения = Date + Time
    Me!Автор = UserName
    DoCmd.RunCommand acCmdSaveRecord
    Set rst = Nothing
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 29.07.2016, 13:08   #5
sharamet91
 
Регистрация: 28.07.2016
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Код:
        For i = LBound(Rec) To UBound(Rec)

здесь ошибку выбивает Type mismatch (Error 13)
sharamet91 вне форума Ответить с цитированием
Старый 29.07.2016, 15:30   #6
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

не увидела объявления переменной REC
а ведь она формируется в одной процедуре, а применяется в другой
должно быть внешнее объявление типа

Код:
Option Explicit
dim rec as variant
Private Sub Form_Current()
    Me.Refresh
    ReDim Rec(Me.Recordset.Fields.Count - 1)
    For i = LBound(Rec) To UBound(Rec)
        Rec(i) = Me.Recordset.Fields(i)
    Next
End Sub

Private Sub Сохранить_Click()
Dim UserName As String
Dim rst As DAO.Recordset
    UserName = Environ("USERNAME")
    If Me.Dirty Then
        Me.SetFocus
        Call Form_Current
        Set rst = CurrentDb.OpenRecordset("Сотрудники_история", dbOpenDynaset)
        rst.AddNew
      
        
        For i = LBound(Rec) To UBound(Rec)
          rst.Fields(i) = Rec(i)
        Next i
          rst.Update
    End If
    Me!ДатаИзменения = Date + Time
    Me!Автор = UserName
    DoCmd.RunCommand acCmdSaveRecord
    Set rst = Nothing
End Sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание

Последний раз редактировалось shanemac51; 29.07.2016 в 15:32.
shanemac51 вне форума Ответить с цитированием
Старый 29.07.2016, 16:02   #7
sharamet91
 
Регистрация: 28.07.2016
Сообщений: 7
По умолчанию

Цитата:
Сообщение от shanemac51 Посмотреть сообщение

Код:
        For i = LBound(Rec) To UBound(Rec)
выдает ошибку и перебрасывает на I

access compile error variable not defined


что это значит?
sharamet91 вне форума Ответить с цитированием
Старый 29.07.2016, 16:05   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

shanemac51 в базе Rec() описан
Код:
Option Compare Database
Dim Rec()
sharamet91
Код:
variable not defined
или опишите все переменные или уберите строку Option Explicit. Лучше, конечно, обявить все переменные
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 29.07.2016, 16:22   #9
sharamet91
 
Регистрация: 28.07.2016
Сообщений: 7
По умолчанию

отлично, заработало)

но теперь при добавлении новой записи и нажатии кнопки "сохранить" все обновляется - форма становится пустой.

и соответсенно вылетает ошибка
sharamet91 вне форума Ответить с цитированием
Старый 29.07.2016, 19:32   #10
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от sharamet91 Посмотреть сообщение
отлично, заработало)

но теперь при добавлении новой записи и нажатии кнопки "сохранить" все обновляется - форма становится пустой.

и соответсенно вылетает ошибка
На каком этапе должна вылетать ошибка ? https://youtu.be/9VRXgqxHhPo
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Учет времени ЯковЗимин Microsoft Office Excel 2 29.07.2014 18:00
БД Учет оборудования a9x Microsoft Office Access 0 02.06.2013 00:58
ИС Учет ПК и ПО на C# aliendeath Фриланс 0 05.05.2013 16:50
Учет задолженности SoLNiFFFKo Помощь студентам 2 05.04.2013 15:55