События. Главная и подчиненная форма

msau
Дата: 21.11.2006 00:18:25
Вопрос: Есть главная (Mainfrm) и подчиненная форма (Subfrm). В главной форме есть поле "State". Если значение "State"=2, то подчиненная форма должна быть запрещена для всех видов изменений и редактирований.
В главной форме событию "Текущая запись" назначена процедура обработки, которая содержит код:
....
lDostup = Not (Mainfrm.State = "2")
Mainfrm.Subfrm.Form.AllowEdits = lDostup
Mainfrm.Subfrm.Form.AllowDeletions = lDostup
Mainfrm.Subfrm.Form.AllowAdditions = lDostup
....

Все замечательно, но при первом открытии формы на записи со значением "State"=2 получаем ошибку:

Run-time error '2455'
Введенное выражение содержит недопустимую ссылку на
свойство "Form/Report".


Почему это происходит??? Видимо, при открытии форм событие "Текущая запись" главной формы возникает несколько раньше открытия или возможности доступа к подчиненной форме (хотя следуя документации должно быть все в порядке..) Как решить эту проблему?
бабай
Дата: 21.11.2006 00:35:12
автор
Есть главная (Mainfrm)


Если Mainfrm это имя вашей главной формы, то ошибка состоит в обращении к текущему экземпляру формы по этому имени.

в модуле формы вы можете обратиться к свойствам формы через служебное слово Me
Вне модуля формы обращайтесь либо через ссылку на коллекцию Forms, либо через явно объявленную и присвоенную переменную подходящего типа.
msau
Дата: 21.11.2006 00:43:26
Mainfrm или Me - значения не имеет. Результат - тот же...

....
lDostup = Not (Me.State = "2")
Me.Subfrm.Form.AllowEdits = lDostup
Me.Subfrm.Form.AllowDeletions = lDostup
Me.Subfrm.Form.AllowAdditions = lDostup
....


то же сообщение о той же ошибке...
бабай
Дата: 21.11.2006 01:03:34
автор
Mainfrm или Me - значения не имеет.

кхм.
что называется - на ваше усмотрение значений.

автор
Результат - тот же...

если то, что вы показывете, единственное имеющее значение к вашему случаю, - значит ваша главная и подчиненная - обе - представляют собой табличные формы и подчиненная свернута в мемент обращения к ней.


ЗЫ
я лимит свего интереса и гадательного задора исчерпал.
счасливого ожидания следующих желающих погадать.
msau
Дата: 21.11.2006 01:13:16
В главной форме такой код:

Private Sub Form_Current()
CheckForm Me
End Sub

Private Sub State_AfterUpdate()
Me.Refresh
CheckForm Me
End Sub

Private Sub CheckForm(frm As Form)
lDostup = Not (frm.State = "2")
If (frm.NewRecord) Then lDostup = True

frm.Subfrm.Form.AllowEdits = lDostup
frm.Subfrm.Form.AllowDeletions = lDostup
frm.Subfrm.Form.AllowAdditions = lDostup
End Sub
Student007
Дата: 21.11.2006 08:11:36
msau

lDostup = Not (frm.State = "2")


Если поле числовое, то кавычек быть не должно.
msau
Дата: 21.11.2006 10:16:51
Поле - текстовое
Гаишник
Дата: 21.11.2006 10:21:27
выложите пример, чтобы можно было конкретно говорить.

В конце концов, для правильной работы кода при загрузки, вы можете использовать Таймер, срабатывающий один раз, после чего Timerinterval обнуляется.
msau
Дата: 21.11.2006 11:59:22
Чтобы запустилось -раскоментировать в процедуре Private Sub CheckForm(frm As Form):
...
'On Error Resume Next
...
бабай
Дата: 21.11.2006 12:14:18
если DoCmd.RunCommand (acCmdRecordsGoToLast) вам действительно нужен - перенесите его из
Form_Open в Form_Load