コードを理解するのを手伝っていただければ幸いですが、あなたの質問とあなたの混乱が何であるかを理解するのに本当に苦労しています。変数、オブジェクト、およびメソッド(関数とサブルーチン)の意味、違い、および目的に混乱しているようです。コードはかなり単純で理解しやすいので、あなたの質問から、あなたはプログラミングに不慣れであると推測しています。コードは非常によく書かれているようには見えません。これは混乱の一部である可能性があります。カプセル化されているようには見えませんが、完全にひどいわけではありません。私は確かにはるかに悪いのを見てきました。
したがって、私の仮定が正しいと仮定して、変数、オブジェクト、およびメソッドを説明することから始めましょう。次に、コードが何をしているのかを簡単に説明します。それでも質問に答えられない場合は、明確にしてください。
変数
変数は最も単純な概念です。これは、メモリに格納されている値への名前付き参照です。コードでrs
は、は変数です。各変数にはタイプがあるため、そのタイプと互換性のある値にのみ設定できます。変数が宣言されているコードを表示しなかったので、次のようなrs
タイプとして宣言されていると想定しています。ADODB.Recordset
Private rs As ADODB.Recordset
オブジェクト
一方、オブジェクトは微妙に異なります。オブジェクトは型のインスタンスです。 RecordSet
はオブジェクトの一種ですが、オブジェクト自体ではありません。同じタイプのオブジェクトが多数作成されている可能性があります。各オブジェクトは通常、同じタイプの他のすべてのオブジェクトから独立しています(ただし、場合によっては、データを共有できます)。変数が参照する値は、常に何らかのタイプのオブジェクトです。多くの変数は同じオブジェクトを参照できますが、すべてのオブジェクトは少なくとも1つの変数によって参照されます。オブジェクトが変数によって参照されなくなった場合、オブジェクトはしばらくの間メモリに存在する可能性がありますが、最終的にはガベージコレクタによって破棄されます。変数はオブジェクトを参照する必要はありません。代わりにを参照できますNothing
。例えば:
rs = New ADODB.RecordSet() 'rs now references a RecordSet object
rs = Nothing 'rs now references no object at all
New
演算子は、新しいオブジェクトを作成するものです。オブジェクトには名前がありません(何らかの方法でそれ自体を実装しない限り)。したがって、上記の変数が呼び出されても、rs
それはオブジェクトの名前ではありません。たとえば、私はこれを行うことができます:
rs = New ADODB.RecordSet()
temp = rs
この例ではtemp
、rs
両方が同じオブジェクトを参照し、一方に加えられた変更がもう一方に自動的に反映されます。したがって、rsとtempはオブジェクト自体の名前ではありません。それらは、それを参照する変数の名前にすぎません。
方法
メソッドは、できればカプセル化されたコードの論理グループであり、名前が割り当てられ、その名前を使用していつでも呼び出すことができます。メソッドは、オプションでパラメーターのリストを取得でき、オプションで単一の値を返すことができます。VBでは、メソッドが値を返す場合はaと呼ばれ、値を返さない場合はルーチンFunction
と呼ばれます。Sub
値型と参照型
混乱させたくないので、これについては詳しく説明しませんが、これまでに説明したことはすべて、値型ではなく参照型に当てはまります。基本的に、参照型は通常、より多くのデータを格納し、多くの場合変更可能な、より複雑なオブジェクト型です。値型は通常、より単純で、より小さく、不変です。2つの変数は同じ参照型オブジェクトを参照できますが、値型オブジェクト(整数など)では参照できません。
あなたのコードの説明
コードには、というメソッドが含まれていますGetData
。これが方法として作られた理由は2つあるかもしれません。まず、作成者は、コード内の複数の場所から呼び出すことを意図していたため、メソッドとして作成した可能性があります。その場合は、同じコードを複数の場所で複製しないように、機能するメソッドを作成することをお勧めします。第二に、作者はそれをコードを読みやすくするための方法にしたかっただけかもしれません。すべてのコードをメソッドに直接入れて、LoadDataBound
コードのそのセクションがデータを取得していることを示すコメントをコードに追加する必要があるのではなく、GetDataと呼ばれる別のメソッドに分割するだけで読みやすくなります。文書化。
このGetData
メソッドはパラメーターを受け取らず、新しいADBDB.RecordSet
オブジェクトを返します。メソッド内GetData
では、OpenADS、OpenSQL、またはOpenFOXのいずれかを呼び出します。これらのメソッドが、新しいRecordSetオブジェクトを作成し、データベースからの値を入力する必要があります。
このLoadDataBound
メソッドは、データベースからデータを取得し、データバインディングを使用して、そのデータを含むフォームにコントロールをロードします。最初に行うことはGetData
、新しいRecordSetオブジェクトを作成し、それをデータで埋めてから、その新しいオブジェクトをメソッドに戻すメソッドを呼び出すことLoadDataBound
です。このLoadDataBound
メソッドは、rs
によって返された新しいRecordSetオブジェクトを参照するように変数を設定しますGetData
。
次に、LoadDataBound
メソッドは、によって返されたRecordSetオブジェクトにデータが含まれているかどうかを確認しGetData
ます。含まれている場合は、そのデータをコントロールにロードします。そうでない場合は、メッセージボックスを表示します。