4

부모 -> 자식 -> 손자 관계에있는 Access 2003 데이터베이스 (Access 2007 개발)에는 세 가지 양식이 있습니다. 하위 폼의 'Form_Load'하위에 손자 (폼 헤더, 행 소스 및 컨트롤 논리)의 일부 속성을 설정합니다. 어린이 양식을 볼 때 모든 것이 제대로 작동합니다. 내가 부모 폼을 볼 때 나는 오류를 얻을 :자식 양식에서 손자 신청 양식에 액세스하려고하면 Microsoft Access 런타임 오류 2455가 발생합니다.

라인을 참조에

Run-time error '2455': You entered an expression that has an invalid reference to the property Form/Report.

: 나는 어떤을 던지는없이 제외하고 양식 속성을 손자 양식 의 속성에 액세스 할 수 있습니다

Me.GrandchildFormName.Form.Foo.Caption = "bar" 

오류. 아무도 이것이 무엇을 일으키는 지 알고 있습니까? 필자는 새로운 데이터베이스에서 테스트 케이스를 작성 했으므로 데이터베이스와 상속 된 레거시 코드에 뭔가 기대어 있습니다. (필자는 18 년 전의 사전 액세스 데이터베이스 시스템)에서 문제를 일으키지 만, 나는 여러분 중 누군가가 해결 방법을 알 수 있는지 여기에서 확인하겠다고 생각했습니다.

|--------------| 
| A   | 
| |----------|| 
| | B  || 
| | |------||| 
| | | C[1] ||| 
| | |------||| 
| |   || 
| | |------||| 
| | | C[2] ||| 
| | |------||| 
| |----------|| 
|--------------| 

을 모두 제거 :

는 관련이 경우

는 형태의 실제 구조는 좀 더 복잡, 여러 번 나타나는 손자 양식 (다른 컨트롤 이름 아래) 자식 폼에서,이 같은입니다 그러나 손자 형태 중 하나가 문제를 해결하지 못합니다.

손주 양식에서로드되는 인스턴스를 알 수있는 방법이 있지만 문제가 해결되지 않을 경우 문제가 될 수있는 코드를 작성할 수 있습니다. 다만 문제 유형을주는 라인 위의

답변

-2

: 오류에는 다음

실행을 재개하고가 문제를 해결하는 것입니다. 한 번 실행하면 선을 지우고 계속 작동 할 수 있습니다.

+2

설명해 주시겠습니까? – jeremy

+0

이것은 매우 특별한 상황에서만 작동합니다. OP에 대한 일반적인 근본 원인은 아닙니다. – PhilS

2

각 양식 (데이터 소스 아님)을 언급 할 때 Parent, ChildGrandChild을 사용할 것입니다.

일반적으로 하위 폼 컨트롤의 Form 속성은 하위 폼이 표시된 후에 만 ​​"유효한 참조"를 가져옵니다. 따라서 Child.Form_Load에 코드를 실행하려면 Parent이 열릴 때 GrandChild이 표시되는지 확인해야합니다.

솔루션

나는 당신의 경우에 당신이 (Parent를 열지 않고) Child를 열면 GrandChild는 볼 수 있지만 GrandChild 당신이 Parent을 열 때, 당신의 UI를 변경하지 않고 다음과 같은 솔루션을 제안 보이지 않는 것으로 가정하기 때문에 :

GrandChild.Form에 액세스하는 Child.Form_Load의 코드를 GrandChild.Form_Load으로 이동하십시오. GrandChild로드 할 때마다 Child (Me.Parent.Form) 또는 Parent (Me.Parent.Parent.Form)의 모든 항목에 액세스 할 수 있습니다.환언 GrandChild에서

은 (Child 또는 Parent부터) 정보를 가져와 GrandChild 변경하여 GrandChild 아래 정보를 밀어 Child 대신 자체를 변경한다.

예 :

는 이제 Parent가 1이있다라고하자 : N의 관계 및 ChildChild에 1을 갖는다 : N GrandChild 관계. Parent은 데이터 시트로 Child을 표시하므로 Parent이 열리면 GrandChild은 표시되지 않습니다. 이 경우 GrandChild.Form에 대한 액세스는 GrandChild이 표시되지 않으므로 2455 런타임 오류이 표시됩니다.

이 예제에서 Child 데이터 시트의 각 줄에는 GrandChild을 표시 할 수있는 더하기 기호가 있습니다. 현재 Child.Form_Load 하위에있는 코드를 실행하는 Parent에 버튼을 넣었다고 가정 해 보겠습니다. Parent 다음에이 버튼을 클릭하면 오류가 발생하지만 (위 참조), Child의 더하기 기호 중 하나를 클릭 한 다음 코드를 2455 오류이 없으면 코드가 실행됩니다.이 경우 GrandChildGrandChild.Form 액세스가 실행되기 전에 표시되었습니다.

+0

Froms! FormNames의 조합이나 양식 이름 또는 둘 다 또는 느낌표 또는 기간 ... 원하는 것을하기 위해 사용해야하는 것은 거의 무작위 인 것으로 보입니다. – Hill