LEADERSOFT.ru Разработка на заказ программ и сайтов
Форумы по информационным технологиям
 
Регистрация  |  Вход
left
Форумы Минимизировать
ПоискСписок форумов
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: Как после...
 Тема: Как после редактирования вернуться к исходному?
 
 15.06.2007 21:09:19
OIaf
21 сообщения


Тема: Как после редактирования вернуться к исходному?
MS SQL Server + MS Access.

Есть форма ввода данных. По нажатию ОК формируются записи в таблицах. Все это оформлено транзакцией с откатом в случае ошибок.

В этой же форме есть табличная форма, содержащая "шаблоны" создаваемых строк (получена запросом из таблицы Шаблонов).

Хочется, чтобы шаблоны были доступны для редактирования, но можно было отказаться от их обновления в таблице Шаблоны.
Например так: создаем рекордсет табличной формы, как-то отсоединяем его от источника, используем, при необходимости проводим синхронизацию с источником.

Есть ли такие механизмы?


P.S. Общий раздел по формам
Автор: Olaf от 16.04.2005 15:11:05 Источник ...
 15.06.2007 21:09:20
All
4316 сообщения
1-ый


RE: Как после редактирования вернуться к исходному?
Написал такое:

Dim cnnP As ADODB.Connection
Dim rstP As ADODB.Recordset

Private Sub Form_Open(Cancel As Integer)

Set cnnP = New ADODB.Connection
Set rstP = New ADODB.Recordset
Set cnnP = CurrentProject.Connection
cnnP.CursorLocation = adUseClient

rstP.Open "dbo.Тарифы", cnnP, adOpenStatic, adLockBatchOptimistic
Set rstP.ActiveConnection = Nothing
Set Me.Recordset = rstP

End Sub


Все вроде бы отлично, но изменения в табличной форме не передаются в рекордсет:(
Если после редактирования данных в табличной форме запустить:

Private Sub Form_Close()

'Set rstP = Me.RecordsetClone - ни на что не влияет
Set rstP.ActiveConnection = cnnP
rstP.UpdateBatch

End Sub

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


P.S. Общий раздел по формам
Автор: Olaf от 0:00:00 Источник ...
 15.06.2007 21:09:20
All
4316 сообщения
1-ый


RE: Как после редактирования вернуться к исходному?
Вот этот код с тракзакциями работает. Проверено на Northind. Надо только таблицу Customers переименовать в tblCustomer. (Источник 2 том Access 2000, 7 глава, Литвин,Гетц,Гилберг)

Private mfDirty As Boolean
Private mfPendingChanges As Boolean
Private mcnnMain As New ADODB.Connection
Private mrstCustomers As New ADODB.Recordset

Private Sub Form_AfterDelConfirm(Status As Integer)
If Not mfPendingChanges Then
mfPendingChanges = (Status = acDeleteOK)
End If
End Sub

Private Sub Form_AfterUpdate()
mfPendingChanges = True
End Sub

Private Sub Form_Delete(Cancel As Integer)
If Not mfDirty Then
mcnnMain.BeginTrans
mfDirty = True
End If
End Sub

Private Sub Form_Dirty(Cancel As Integer)
If Not mfDirty Then
mcnnMain.BeginTrans
mfDirty = True
End If
End Sub

Private Sub Form_Open(Cancel As Integer)
mcnnMain.ConnectionString = CurrentProject.Connection
mcnnMain.Open
mrstCustomers.Open "SELECT * FROM tblCustomer", mcnnMain, adOpenKeyset, adLockOptimistic
Set Me.Recordset = mrstCustomers
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim intRet As Integer
If mfPendingChanges Then
intRet = MsgBox("Commit all changes?", vbYesNoCancel)
If intRet = vbYes Then
mcnnMain.CommitTrans
ElseIf intRet = vbNo Then
mcnnMain.RollbackTrans
Else
Cancel = True
End If
Else
If mfDirty Then
mcnnMain.RollbackTrans
End If
End If
Set mrstCustomers = Nothing
Set mcnnMain = Nothing
End Sub



P.S. Общий раздел по формам
Автор: Admin от 0:00:00 Источник ...
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: Как после...
ПоискПоиск  Список форумовСписок форумов  
right