Frage

Ich verwende Access 2003 VBA für die Herstellung von Stücklisten rekursiven Daten zu verarbeiten. Ich baute ein Klassenmodul zu meinen Haupttabellen haben statischen Umfang zu lassen. Dies scheint Rekursion zu vereinfachen - es setzt mich von freien Ebenen nach oben und unten wieder zu zählen, wie ich eine Stückliste durchlaufen. Ich öffne nicht die gleiche Cord-redundant; Ich bin stattdessen viel zu filtern.

Nachdem diese im Gang immer las ich über Object-Relation Modellierung und entschied Instanz nicht einen Re-Cord, aber einen Rekord. Dann werden die Felder dieses Datensatzes können Eigenschaften sein. Nach viel Arbeit und viele Nervenkitzel des Sieges, die meistens falsch waren, erkannte ich, dieser Ansatz keine Vorteile hat, weil Access-Tabelle basiert.

Meine Klasse Module nach wie vor helfen. Meine Frage bezieht sich auf zwei alternative Versionen unten. Die erste verwendet zwei Instanzen (Eltern, Kind). Die zweite benutzt ein und verwendet es dann. Offensichtlich ist die erste ist ORM-beeinflusst.

Gibt es einen Grund sich der eine über den anderen zu wählen? Beachten Sie auch, die Kursivschrift am Ende der Leitung: Wenn ich brauche das nicht (weil ich an den Eltern mehr Informationen brauche nicht), ist, dass die Antwort ändern? Kann jemand mir helfen mit meinem Denken im Allgemeinen?

(Beachten Sie, dass ich Cord-Sets in der Nähe, aber nicht Klasseninstanzen. Mein Verständnis ist, dass VBA-Instanzen selbst schließen und ließ sie tun, dass die akzeptierte Praxis ist. Ich scheine auf eine neue Ebene von Pseudo Pseudo-Code genommen zu haben ... das Ziel ist Klarheit, hoffe, es funktioniert.)

    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 )
War es hilfreich?

Lösung

Es scheint, dass der ehemalige Sie besser gibt einfache Bedienung aus der Perspektive des Programmierers, wie man einfach mit dem Datensatz Sie sich interessieren und Wurzel leicht in assoziierte Aufzeichnungen nur durch den Zugriff auf Eigenschaften des Datensatzes Sie mit gestartet beginnen.

Auf der anderen Seite, letztere scheint effizienter zu sein, da es nicht pessimistisch ist jeden Datensatz zu laden, die auf den aktuellen Beziehung gesetzt werden können.

Ein paar potentielle Optimierungen an den ersten Ansatz, der es, die Effizienz des zweiten Ansatz könnte helfen, während Einfachheit der Verwendung beibehalten:

  • Es werden nur die untergeordneten Datensätze laden, wie sie benötigt werden. Mit Get / Set-Accessoren ermöglicht es Ihnen, die bis just-in-time zu laden, anstatt alle auf einmal, wenn der übergeordneten Datensatz aus der Datenbank gezogen wird.
  • Alternativ können Sie einen JOIN alle Daten, die die Kinder auf einmal als Teil einer einzigen Abfrage abzurufen. Dies würde Ihnen noch geben alle Daten vorbelastet, aber würde die Anzahl der Abfragen, die Sie ausführen müssen, um reduzieren sie im Wesentlichen erhalten.

Hope, die etwas Hilfe ist.

Andere Tipps

Haben Sie darüber nachgedacht, den MSDataShape Provider und die SHAPE-Syntax hierarchische ADO-Cord-Sets zu erzeugen ?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top