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

Форум: MS ACCESS

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

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

 
 

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

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

тема: как определить в каком режиме открыта форма
 
 автор: dmsrv803   (30.09.2010 в 17:42)   личное сообщение
 
 

Добрые люди подскажите кто знает - как определить в каком режиме открыта форма в acFormEdit или в acFormAdd. И как можно при закрытии отменить изменение данных в форме, открытой как FormEdit (например когда пользователь жмет кнопку не 'сохранить', а 'отменить')

  Ответить  
 
 автор: kot_k_k   (01.10.2010 в 09:24)   личное сообщение
 
 

может проще контейнер - временная табла - тогда и морочить не чего

  Ответить  
 
 автор: Анатолий (Киев)   (01.10.2010 в 11:23)   личное сообщение
 
 

как определить в каком режиме открыта форма в acFormEdit или в acFormAdd


Проверить Me.DataEntry

как можно при закрытии отменить изменение данных в форме


Выполнить Me.Undo (лучше дважды). Учтите, что при закрытии формы новая или измененная запись сохраняется. Если сохранение нужно выполнять только кнопкой 'сохранить', то отмену изменений нужно выполнить и на Form_Unload.

  Ответить  
 
 автор: kot_k_k   (01.10.2010 в 11:48)   личное сообщение
 
 

а если ленточная форма и источник таблица - как отменить все что наворотили

  Ответить  
 
 автор: Анатолий (Киев)   (01.10.2010 в 12:23)   личное сообщение
 
 


а если ленточная форма и источник таблица - как отменить все что наворотили


В этом случае на открытии формы создается новый WorkSpace - в нем дубль БД, - в ней запрос, дубль источника формы, и присваивается св-ву Recordset формы - включается транзакция.
На кнопках "Сохранить" и "отменить" CommitTrans или RollBack соответственно.
На закрытии формы - RollBack и уничтожение объектов.
Пример можно посмотреть у Гетса.

  Ответить  
 
 автор: kot_k_k   (01.10.2010 в 12:37)   личное сообщение
 
 

А Ф И Г Е Т Ь.
тихо сижу в ступоре и пью чайс (чай с коняком)
в который раз убеждаюсь что я так мало знаю.


но с другой стороны проще временную таблу сделать - хотя и в этом я могу ошибаться

  Ответить  
 
 автор: Дядя Федор   (01.10.2010 в 13:08)   личное сообщение
 
 

Вопрос в том, что отменять и сколько.
1.Отменить изменения
2.Отменить удаления записей
3.Отменить добавленные записи.
Если полей и изменений немного можно использовать свои методы необязательно с таблицами.

Если много - транзакции.Но.
Транзакции, если я не ошибаюсь, не отменяют удаление, а также не позволяют обновлять форму при добавлении, если только она не табличная. Нет?

Пример без транзакций.
На форме поля DataPr, KolOtgr (Дата и Количество)


Dim idnew As String, idnewizm As String
Private Sub DataPr_AfterUpdate()
idnewizm = idnewizm & ";" & Me.IdPred & ";" & Me.DataPr & ";" & Me.KolOtgr & ";" 
'Me.IdPred - Id 
 Me.Requery
End Sub
Private Sub KolOtgr_AfterUpdate()
idnewizm = idnewizm & ";" & Me.IdPred & ";" & Me.DataPr & ";" & Me.KolOtgr & ";"
Me.Requery
End Sub
....
На добавление записи
...
idnew = idnew & Me.IdPred & ";"
....
На кнопку "Отменить" вызов проц. OTKAT:
Public Sub OTKAT()
Dim rst As DAO.Recordset, j As Integer, vmasdel As Variant, jj As Integer
Me.RecordSource = Me.RecordSource 'это для подч формы можно не применять
On Error GoTo errortkat
'Отменяем добавленные записи
If idnew <> "" Then
vmasdel = Split(idnew, ";")
Set rst = Me.RecordsetClone
 With rst
 If .RecordCount > 0 Then
 .MoveFirst
  For j = 0 To UBound(vmasdel) - 1
   .FindFirst "IdPred=" & vmasdel(j)
   .Delete
  Next j
 End If
 End With
End If
Me.Requery: Me.Refresh
Set rst = Nothing
idnew = ""
''Отменяем изменения в записях
If idnewizm <> "" Then
vmasdel = Split(idnewizm, ";")
Set rst = Me.RecordsetClone
 With rst
 .MoveFirst
   'IdPred
  For j = 1 To UBound(vmasdel) - 1 Step 3
   .FindFirst "IdPred=" & vmasdel(j)
   .Edit
   !DataPr = vmasdel(j + 1)
   !KolOtgr = vmasdel(j + 2)
   .Update
  Next j
 End With
 Set rst = Nothing
 idnewizm = ""
 End If

Me.Requery
On Error Resume Next
DoCmd.GoToRecord , , acLast
Exit Sub
errortkat:
MsgBox "Err" & "тартаата"
End Sub

  Ответить  
 
 автор: Гоблин   (01.10.2010 в 21:26)   личное сообщение
 
 


До такого кода мне не дорасти. А не проще ли думать, прежде чем что-то удалять или изменять? Если удаленное возвращать, стало быть все, что удалено из таблицы, должно находиться в некоем буфере памяти. Вот оттуда и брать. Пошагово. Как в ворде например.
Или вы не об этом.

  Ответить  
 
 автор: Дядя Федор   (04.10.2010 в 14:56)   личное сообщение
 
 

именно!

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