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年前的Access數據庫系統)導致的問題,但我想我會在這裏檢查,看看你們中的任何一個人是否可能知道解決方法。

如果是相關的,這些形式的實際結構是一個比較複雜,出現多次的孫子形式(在不同的控制名稱)子窗體,像這樣:

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

消除所有但其中一個孫子形式不能解決問題。

我大概可以編寫代碼來解決這個問題,如果有一種方法讓孫表單知道它正在被加載的實例,但據我所知,這是不可能的。

回答

-2

只是上面的線爲有問題的類型: 上的錯誤繼續下一步

運行它,這將解決您的問題。一次運行後,您可以擦除線路並繼續工作。

+2

你能解釋一下嗎? – jeremy

+0

這隻適用於非常特殊的情況下,這似乎不是OP的問題的一般根源情況。 – PhilS

2

我將使用Parent,ChildGrandChild來引用相應的表單(不是數據源)。

通常,子窗體控件的Form屬性只有在顯示子窗體後纔會獲得「有效引用」。因此,如果您要執行Child.Form_Load中的代碼,則必須確保在Parent打開時GrandChild可見。

解決方案

因爲我認爲你的情況GrandChild是可見的,如果你打開Child(不打開Parent),但GrandChild是不可見的,當你打開Parent,我建議以下解決方案而無需改變你的UI :

將訪問GrandChild.Form的代碼Child.Form_Load移動到GrandChild.Form_Load。每當GrandChild加載它可以訪問從ChildMe.Parent.Form)或甚至ParentMe.Parent.Parent.Form)的所有內容。

換句話說GrandChild具有拉的信息(從ChildParent)和改變本身,而不是Child通過改變GrandChild向下推信息GrandChild

例子:

假設Parent有一個1:n的關係ChildChild有一個1:N至GrandChild關係。 Parent提供Child作爲數據表,因此GrandChildParent開放時不顯示。在這種情況下,對GrandChild.Form的任何訪問都會導致2455運行時錯誤,因爲GrandChild未顯示。

在這個例子中,Child數據表的每一行都會有一個加號,允許顯示GrandChild。假設您在Parent上放置了一個按鈕,該按鈕執行您目前在Child.Form_Load子版中的代碼。在Parent之後單擊此按鈕打開導致出現錯誤的結果(請參閱上文),但是如果您單擊Child中的某個加號,然後單擊該按鈕,代碼將執行而不會出現2455錯誤,因爲在這種情況下GrandChild在執行GrandChild.Form訪問之前變得可見。

+0

似乎幾乎完全是隨機的Froms!FormNames的組合或者只是表單名稱或兩者或感嘆號或句點......你必須用它來做你想做的事情。 – Hill

相關問題