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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Error 3021 когда Form_Unload
 
 автор: Stanislav   (15.07.2010 в 09:49)   личное сообщение
 
 

Есть форма с субформой. На форме кнопка "Exit", по клику на которой выполняется код:

DoCmd.Close acForm, "Form1"

Для формы также прописан код:

Private Sub Form_Unload(Cancel As Integer)
if Условие Then
Cancel = True
end if

Проблема:
Когда жмем на кнопку Exit и условие выполняется, происходит отмена закрытия формы (Cancel=True), но при этом выходит сообщение об ошибке: Run-time error 3021: no current record.
Если же нажать, не на Exit, а на крестик в правом верхнем углу формы - происходит то же самое: условие выполняется, также происходит отмена закрытия формы, но без ошибки.
Не пойму в чем разница между способами закрытия формы: Docmd.Close и нажатием на крестик. И почему Docmd.Close вызывает ошибку, а крестик нет.
Не пойму суть ошибки. Читал в инете - пишут что типа нет записи, чтобы выполнить с ней какие-то действия. Все равно непонятно.
Не предлагайте убрать кнопку Exit и пользоваться стандартным крестиком - с кнопкой намного удобнее.

  Ответить  
 
 автор: Stanislav   (15.07.2010 в 10:34)   личное сообщение
 
 

Сейчас для примера создал пустую форму, разместил на ней кнопку и checkbox.


Option Compare Database
Option Explicit

Private Sub Command0_Click()
DoCmd.Close acForm, "Form1"
End Sub

Private Sub Form_Unload(Cancel As Integer)
If Me.Check1 = -1 Then
Cancel = True
End If
End Sub


Ставлю галку в checkbox. Если пытаюсь закрыть форму крестиком - она не закрывается, как и должно быть. Если пытаюсь закрыть кнопкой, выдает ошибку: runtime error 2501 the close action was cancelled.

Нашел в инете следующее:


In the sample application we use IsMemberOfSecurityGroups to set Cancel to True only if the user is not allowed access.

There is one somewhat unfortunate side-effect of setting Cancel to True: the calling routine will get a runtime error 2501 = The OpenForm action was canceled. We handle that with an error handler that ignores the error if it is number 2501:

1: Private Sub cmdForm2_Click()
2: On Error GoTo Error_Handler
3:
4: DoCmd.OpenForm "frmTest_NoAccess"
5:
6: Exit_Handler:
7: Exit Sub
8:
9: Error_Handler:
10: If Err.Number = 2501 Then
11: 'Error 2501 = The OpenForm action was canceled.
12: 'Not really an error. Just indicates we were unable to open the form, which is normal if we have insufficient rights.
13: Else
14: MsgBox Err.Description, vbCritical
15: End If
16: Resume Exit_Handler
17: End Sub


источник:http://www.accesssecurityblog.com/

В общем, никакая это не ошибка, надо ее обработать и не показывать.

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