Ошибка при удалении.

konst37
Дата: 15.12.2011 22:24:27
Есть форма "Получатели". На ней две подчиненные формы:"подчиненная_Оплаты" и "подчиненная_Проводки"
"подчиненная_Оплаты" на основе таблицы
"подчиненная_Проводки" на основе запроса
При движении по строкам "подчиненная_Оплаты" на событие "текущая запись" происходит смена RecordSource у "подчиненная_Проводки" чтоб отобразились проводки, связанные с текущей оплатой.
Как только пытаюсь с контекстного меню формы "подчиненная_Оплаты" удалять запись
выскакивает сообщение "Данная операция не поддерживается в транзакциях"
на этой строке
Forms![Получатели].Controls![подчиненная_Проводки].Form.RecordSource = strSQL

Дело в том, что удаление из "подчиненная_Оплаты" связано с еще некоторыми апдейтами и на
событии "удаление" в "подчиненная_Оплаты" висит еще код VBA
alvk
Дата: 16.12.2011 07:15:29
konst37,

Нам нужно угадать этот код?
konst37
Дата: 16.12.2011 15:36:31
Вот код на событие в "подчиненная_Оплаты" из которой пытаюсь удалить запись
Выбираются записи из таблицы проводок, связанные с этой оплатой и апдейтятся Подписки (уменьшается на сумму проводки оплата за подписку), так как оплата удаляется.

Private Sub Form_Delete(Cancel As Integer)
    Dim strSQL As String
    Dim db As Database
    Dim rst, rst1 As DAO.Recordset
    Set db = CurrentDb
    
    strSQL = "select кодПодписки, Сумма  from Проводки where кодОплаты = " & Me.Код
    Debug.Print strSQL
    Set rst = db.OpenRecordset(strSQL)
    rst.MoveLast
    If rst.RecordCount > 0 Then
         rst.MoveFirst
         Do While Not rst.EOF
             strSQL = "Update [Подписки] set Оплата = Оплата - " & rst.Fields(1) & " where код = " & rst.Fields(0)
             Debug.Print strSQL
             db.Execute strSQL
             rst.MoveNext
         Loop
   End If
End Sub
Анатолий ( Киев )
Дата: 16.12.2011 16:35:48
Удаление записи (группы выделенных записей) выполняется внутри транзакции, которая начинается до первого Form_Delete и завершается перед событием Form_AfterDeleteConfirm. Внутри ее вы можете только отменить удаление конкретных или всех записей.
К тому же, если вы имеете возможность отменить удаление - ваш код лишен логики, т.к. удаление отменено, а изменения внесены.
В подобных случаях надо в заголовке модуля формы объявить переменную типа динамического массива или (лучше) Collection, а при удалении:
1. На Form_Delete писать туда ID записи (у вас - Me.Код);
2. На Form_AfterDeleteConfirm при статусе acDeleteOK выполнять свои обработки, а в конце (при любом статусе) очистить массив;
3. На Form_BeforeDeleteConfirm при отказе от удаления - также очистить массив.
sdku
Дата: 16.12.2011 17:09:33
konst37,
с какой целью объявлен "rst1"?