sql >> データベース >  >> RDS >> Access

基本クラスと派生オブジェクトのバリアント

    はじめに。

    先週、セットを介して基本クラスオブジェクトを渡す例を試しました。 プロパティプロシージャ、メモリ内のオブジェクトの一部になります。渡されたオブジェクトは、メモリ内のメインオブジェクトの拡張オブジェクトまたは子オブジェクトになります。以前のプログラムでは、子オブジェクトをターゲットオブジェクトに渡すことは、テストプログラムのインスタンス化フェーズで行われました。プログラムの後半で、渡されたオブジェクトプロパティに値を割り当てました。次の例は少し異なります。

    MS-Accessクラスモジュールに関する以前の記事を読みたい方のために、リンクを以下に示します。

    • MS-AccessクラスモジュールとVBA
    • MS-AccessVBAクラスオブジェクト配列
    • MS-Accessの基本クラスと派生オブジェクト
    • VBA基本クラスと派生オブジェクト-2

    今回は、テストプログラムで両方のオブジェクト(ClsArea –基本クラス、ClsVolume2 –ターゲットクラス)を別々に開きます。ターゲットクラスClsVolume2オブジェクトに値を渡す前に、基本クラスClsAreaプロパティに値を割り当てます。 Volume2クラスには、 p_Heightという独自のプロパティが1つしかないことに注意してください。 プロパティとそのメソッドVolume() 長さが必要です および ボリュームを計算するための基本クラスClsAreaの値。

    1. 次のサンプルテストコードをコピーして標準モジュールに貼り付けます。

      SetNewVol2_2プロシージャ。

      Public Sub SetNewVol2_2()
      'Method 2/2
      Dim CA As ClsArea
      Dim Vol As ClsVolume2
      
      Set CA = New ClsArea
      Set Vol = New ClsVolume2
      
      CA.strDesc = "Bed Room"
      CA.dblLength = 90
      CA.dblWidth = 10
      Stop
      
      
      'Here ClsArea class Object CA is passed to the 
      ‘Property procedure Set CArea of ClsVolume2 object Vol
      Set Vol.CArea = CA 'Pass ClsArea obj to ClsVolume2
      
      Vol.dblHeight = 10 'assign height to ClsVolume2
      
      
      Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
      With Vol.CArea
        Debug.Print .strDesc, .dblLength, .dblWidth, .Area(), Vol.dblHeight, Vol.Volume()
      End With
      Stop
      
      Set CA = Nothing
      Set Vol = Nothing
      
      End Sub
      

      VBAコードレビュー。

      最初の薄暗い ステートメント、 CA ClsAreaObjectおよびVolとして定義されます ClsVolume2オブジェクトとして。次の2つのステートメントは、メモリ内の両方のオブジェクトをインスタンス化します。

      次の3つのステートメントは、ClsAreaクラスオブジェクトのプロパティに値を割り当てます。

      停止 ステートメントはコードの実行を一時停止して、ローカルウィンドウでオブジェクトプロパティの値を確認できるようにします。

      Set Vol.CArea =CA ステートメントは、ClsAreaクラスオブジェクトCAを子オブジェクトとして Volに割り当てます。 (ClsVolume2)オブジェクト。

      次のステップではdblHeight ClsVolume2クラスオブジェクトのプロパティには、値10が割り当てられています。

      Stopステートメントの前の次のステートメントは、値をメモリからデバッグウィンドウに出力します。

      次の2つのセット ステートメントは、プログラムを終了する前に、オブジェクトをメモリから削除します。

      ローカルウィンドウを表示します。

    2. ローカルウィンドウを選択します 表示メニューからのオプション。
    3. コードの途中をクリックして、 F5を押します プログラムが停止で一時停止するまでコードを実行します 声明。または、 F8を押すこともできます コードを一度に1ステップずつ実行して、各ステップでローカルウィンドウの変更を検査します。
    4. [+]をクリックします オブジェクトのプロパティと値の両方を展開して表示するための記号。
    5. CAreaを確認してください およびp_Area のオブジェクト参照 の列 オブジェクト そこにある値は何もないと表示されています CAオブジェクトをVolオブジェクトにまだ渡していないためです。
    6. ローカルウィンドウのコンテンツの表示が終了したら、次の停止までコードを実行します 声明。さて、 CArea プロパティプロシージャとp_Areaを取得します オブジェクトにはClsAreaクラスオブジェクトが割り当てられます。

    これら2つのクラスClsAreaとClsVolume2の両方の別のバリアントの例を試してみます。

    新しいクラスモジュールClsVolume3。

    1.新しいクラスモジュールを挿入し、その名前のプロパティ値を ClsVolume3に変更します。 。

    2.次のVBAコードをコピーしてClsVolume3クラスモジュールに貼り付けます。

    Option Compare Database
    Option Explicit
    'Method three 
    Private p_Height As Double
    Public p_Area As ClsArea
    
    Public Property Get dblHeight() As Double
        dblHeight = p_Height
    End Property
    
    Public Property Let dblHeight(ByVal dblNewValue As Double)
        p_Height = dblNewValue
    End Property
    
    Public Function Volume() As Double
        Volume = p_Area.dblLength * p_Area.dblWidth * Me.dblHeight
    End Function
    
    Private Sub Class_Initialize()
        Set p_Area = New ClsArea
    End Sub
    
    Private Sub Class_Terminate()
        Set p_Area = Nothing
    End Sub

    コードを最初から確認してください: p_Height プライベートプロパティとして宣言されています。 p_Area パブリックとして宣言されたClsVolume3クラスのプロパティ ClsAreaオブジェクト。つまり、 p_Area 直接Get/ Let用の独自の表示可能なプロパティを持つClsVolume3クラスのプロパティとして表示されます 標準モジュールのユーザープログラムでの操作。 ClsAreaクラスオブジェクトはClsVolume3クラスのパブリックプロパティとして宣言されていますが、そのプロパティはClsAreaクラス自体にカプセル化されています。

    Class_Initialize()を確認してください およびClass_Terminate() サブルーチン。 ClsAreaオブジェクトは、Class_Initialize()コードでインスタンス化され、ユーザープログラムが終了すると、Class_Terminate()コードでメモリからオブジェクトを削除します。

    テストプログラム。

    サンプルのテストVBAコードを以下に示します。

    コードをコピーして標準モジュールに貼り付けます。

    Public Sub SNewVol3()
    'Here ClsArea class is declared as a Public Property of ClsVolume3
    Dim volm As ClsVolume3
    
    Set volm = New ClsVolume3
    
    volm.p_Area.strDesc = "Bed Room"
    volm.p_Area.dblLength = 15 'assign length
    volm.p_Area.dblWidth = 10 'assign width in clsArea
    volm.dblHeight = 10 'assign height to ClsVolume2
    
    Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
    With volm.p_Area
       Debug.Print .strDesc, .dblLength, .dblWidth, .Area, volm.dblHeight, volm.Volume
    End With
    Set volm = Nothing
    
    End Sub
    

    まだ開いていない場合は、ローカルウィンドウを表示します([表示]-> [ローカルウィンドウ])。

    コードの途中をクリックして、 F8を押します。 一度に1行ずつVBAコードを実行し、ローカルウィンドウを監視して、各ステップで何が発生するかを追跡します。

    ClsVolumeクラスの最初の例を除いて、上記のClsVolumeクラスのすべてのバリアントは、より少ないコードで記述されています。

    レコードセットオブジェクトの操作。

    来週は、組み込みのオブジェクト DAO.Recordsetを使用します。 クラスモジュールを作成します 宛先:

    1. フィールドの計算と更新
    2. データを並べ替える
    3. ソートされたデータをデバッグウィンドウに出力します
    4. 並べ替えられたデータを使用してテーブルのクローンを作成します。

    それは来週のたくさんの行動です。

    このトピックのすべてのリンクのリスト。

    1. MS-AccessクラスモジュールとVBA
    2. MS-AccessVBAクラスオブジェクト配列
    3. MS-Accessの基本クラスと派生オブジェクト
    4. VBA基本クラスと派生オブジェクト-2
    5. 基本クラスと派生オブジェクトのバリアント
    6. Ms-Accessレコードセットとクラスモジュール
    7. アクセスクラスモジュールとラッパークラス
    8. ラッパークラスの機能変換
    9. Ms-Accessおよびコレクションオブジェクトの基本
    10. Ms-Accessクラスモジュールとコレクションオブジェクト
    11. コレクションオブジェクトとフォームのテーブルレコード
    12. 辞書オブジェクトの基本
    13. 辞書オブジェクトの基本-2
    14. 辞書オブジェクトのキーとアイテムの並べ替え
    15. 辞書からフォームへのレコードの表示
    16. クラスオブジェクトをディクショナリアイテムとして追加
    17. フォームのクラスオブジェクトディクショナリアイテムを更新する


    1. SSISパッケージを使用してSQLServerからExcelおよびテキストファイルにデータをエクスポートする

    2. SQLでの2つの日付間の完全な月数の計算

    3. ODP.NETマネージド-要求された.NetFrameworkデータプロバイダーが見つかりません

    4. SQLServerの一部のオペレーターの説明