2009-07-14 123 views
1

我使用Access 2003 VBA處理製造BOM的遞歸數據。我建立了一個類模塊,讓我的主表具有靜態範圍。這似乎簡化了遞歸 - 當我遍歷BOM時,它使我無需再次計數級別。我不是多餘地打開相同的記錄集;我正在過濾很多。正確使用類實例

在得到這個進展之後,我讀了關於對象關係建模並決定實例化一個記錄集,而不是一個記錄。然後該記錄的字段可以是屬性。經過大量工作和大部分錯誤的勝利刺激後,我意識到這種方法沒有好處,因爲Access基於表格。

我的課程模塊仍然像以前一樣幫助。我的問題是關於以下兩個替代版本。第一個使用兩個實例(Parent,Child)。第二個使用一個然後重新使用它。顯然,第一個是受ORM影響的。

是否有任何理由選擇其中之一?另外,最後注意斜體行:如果我不需要(因爲我不需要關於父母的更多信息),這是否會改變答案?任何人都可以用我的想法來幫助我嗎? (注意,我關閉了記錄集,但沒有類實例,我的理解是VBA實例關閉它們並讓它們這樣做是可以接受的做法,我似乎已經將僞代碼提升到了新的僞目標層次......目標爲清晰起見,希望它的工作原理。)

 
    VERSION 1 
    Property Sub ReviewPart (Parent_Part_ID) 

    Get Parent_Part_ID 
    Create instance of Class --> Get recordset 
    Filter Class recordset (Parent_Part_ID) 
    Exploit Class recordset 
    See if Parent_Part_ID has Childs 
    If it does: 
     Open recordset of Childs 
     For each Child 
     Get Child_Part_ID 
     Create instance of Class --> Get recordset 
     Filter Class recordset (Child_Part_ID) 
     Exploit Class recordset 
     See if Child_Part_ID has Childs 
     If it does: 
      Instance New ReviewPart (Child_Part_ID) 
     Otherwise: 
     Nothing; Move On 
     Next Child 
     Close recordset of Childs 
    Otherwise: 
     Move On 
    Exploit Class recordset (still points to parent) 

         
 
VERSION 2 Property Sub ReviewPart (Parent_Part_ID) Get Parent_Part_ID Create instance of Class --> Get recordset Filter Class recordset (Parent_Part_ID) Exploit Class recordset See if Parent_Part_ID has Childs If it does: Open recordset of Childs For each Child Get Child_Part_ID Create instance of Class --> Get recordset Filter Class recordset (Child_Part_ID) Exploit Class recordset See if Child_Part_ID has Childs If it does: Instance New ReviewPart (Child_Part_ID) Otherwise: Nothing; Move On Next Child Close recordset of Childs Otherwise: Move On Filter Class recordset (Parent_Part_ID) Exploit Class recordset (still points to parent)
+0

我很感謝回覆(7/19之一)。但我的無知並沒有感覺到有所改善。我正在按「接受」按鈕,希望我會在一天中瞭解如何提出問題。 – Smandoli 2009-07-20 21:30:16

+0

您是否檢查了在查詢Google Groups以獲取「BOM類模塊組:* access *」時所獲得的少量線程?這個話題是Access組中常年出現的,儘管並不總是用類模塊來解決(儘管它對我來說應該是合乎邏輯的)。 – 2009-08-08 00:15:03

回答

1

看來,前者爲您提供了更好的易用性,從程序員的角度來看,作爲一個可以簡單地用你感興趣的,容易根到副記錄的記錄開始只需訪問您開始使用的記錄的屬性即可。

另一方面,後者看起來效率更高,因爲它不會悲觀地加載可能與當前相關的每條記錄。

幾個潛在的優化,以第一種方法,可以幫助它接近第二的效率,同時保持易用性的使用:

  • 只有在需要時自動加載子記錄。使用獲取/設置訪問器將允許您在數據庫中從母版記錄中一次性加載這些訪問器,而不是一次性加載這些訪問器。
  • 或者,使用JOIN作爲單個查詢的一部分一次檢索所有子數據。這仍然會給你所有的數據預加載,但會減少你必須運行的查詢數量,以實現它。

希望這有些幫助。

+0

「只在需要的時候加載Child記錄。使用Get/Set訪問器將允許您及時加載這些記錄」...這將是ORM,並且據我所知,Access會讓我安排這種方法,但沒有好處,因爲它是以表格爲導向的。我的嘗試導致了我稱爲RGORM的Rube Goldberg ORM。你的見解? .......「使用JOIN一次檢索所有的兒童數據」 - 是的,這是拆除RGORM的另一步驟,也是一個很好的結果。等待這個問題的解決辦法就是這樣。 – Smandoli 2009-07-15 19:56:58