HelloData に関するコメント
HelloData アプリケーションは、一般的な ADO アプリケーションの基本的な操作 (データの取得、調査、編集、更新) をステップ実行します。 アプリケーションを起動したら、最初のボタン ([データの取得]) をクリックします。 これにより、GetData サブルーチンが実行されます。
GetData
GetData は、有効な接続文字列をモジュールレベルの変数 (m_sConnStr) に格納します。 接続文字列の詳細については、「接続文字列の作成」を参照してください。
Visual Basic OnError ステートメントを使用してエラー ハンドラーを割り当てます。 ADO でのエラー処理の詳細については、エラー処理に関するページを参照してください。 HelloData の使用例では "切断された Recordset" が作成されるため、新しい Connection オブジェクトが作成され、CursorLocation プロパティが adUseClient に設定されます。 つまり、データがデータ ソースからフェッチされるとすぐに、データ ソースとの物理的な接続は切断されますが、Recordset オブジェクトにローカルにキャッシュされているデータは引き続き操作できます。
接続が開かれたら、SQL 文字列を変数 (sSQL) に割り当てます。 次に、新しい Recordset オブジェクト m_oRecordset1
のインスタンスを作成します。 次のコード行では、既存の Connection を介して Recordset を開き、sSQL
を Recordset のソースとして渡します。 最後の引数のadCmdText を Recordset Open メソッドに渡すことで、Recordset のソースとして渡した SQL 文字列がコマンドのテキスト定義であると ADO が判断するのに役立ちます。 この行は、Recordset に関連付けられている LockType と CursorType も設定します。
次のコード行は、MarshalOptions プロパティを adMarshalModifiedOnly に等しく設定します。 MarshalOptions は、中間層 (または Web サーバー) にマーシャリングする必要があるレコードを示します。 マーシャリングの詳細については、COM のドキュメントを参照してください。 クライアント側カーソル (CursorLocation = adUseClient) で adMarshalModifiedOnly を使用すると、クライアントで変更されたレコードのみが中間層に書き戻されます。 MarshalOptions を adMarshalModifiedOnly に設定すると、マーシャリングされる行が少なくなるため、パフォーマンスが向上します。
次に、その ActiveConnection プロパティを Nothing に等しく設定して、Recordset を切断します。 詳細については、「データの更新と保持」の「レコードセットの切断と再接続」セクションを参照してください。
データ ソースへの接続を閉じ、既存の Connection オブジェクトを破棄します。 これにより、使用されたリソースが解放されます。
最後の手順として、フォーム上の Microsoft DataGrid コントロールの DataSource として Recordset を設定し、Recordset のデータをフォームに簡単に表示できるようにします。
2 番目のボタン ([データの確認]) をクリックします。 これにより、ExamineData サブルーチンが実行されます。
ExamineData
ExamineData では、Recordset オブジェクトのさまざまなメソッドとプロパティを使用して、Recordset 内のデータに関する情報を表示します。 また、RecordCount プロパティを使用してレコードの数を報告します。 Recordset をループ処理し、フォームの表示テキスト ボックスに AbsolutePosition プロパティの値を出力します。 さらに、ループ内で、3 番目のレコードの Bookmark プロパティの値が、後で使用するためにバリアント変数 vBookmark に格納されます。
ルーチンは、前に格納したブックマーク変数を使用して、3 番目のレコードに直接戻ります。 このルーチンは WalkFields サブルーチンを呼び出し、このサブルーチンは Recordset の Fields コレクションをループ処理し、コレクション内の各 Field に関する詳細を表示します。
最後に、ExamineData では、Recordset の Filter プロパティを使用して、CategoryId が 2 に等しいレコードのみを画面に表示します。 このフィルターを適用した結果は、フォームの表示グリッドにすぐに表示されます。
ExamineData サブルーチンに示される機能の詳細については、「データの検査」を参照してください。
次に、3 番目のボタン ([データの編集]) をクリックします。 これにより、EditData サブルーチンが実行されます。
EditData
コードが EditData サブルーチンに入っても、Recordset は引き続き、2 に等しい CategoryId でフィルター処理されるため、フィルター条件を満たす項目のみが表示されます。 最初に Recordset をループし、Recordset 内の表示される各項目の価格を 10% 引き上げます。 Price フィールドの値は、そのフィールドの Value プロパティを新しい有効な金額に等しく設定することで変更されます。
Recordset がデータ ソースから切断されていることに注意してください。 EditData で行われた変更は、ローカルにキャッシュされたデータのコピーに対してのみ行われます。 詳細については、「データの編集」を参照してください。
4 番目のボタン ([データの更新]) をクリックするまで、データ ソースに対して変更は行われません。 ボタンがクリックされると、UpdateData サブルーチンが実行されます。
UpdateData
UpdateData は最初に、Recordset に適用されているフィルターを削除します。 このコードは、フィルター処理されていない Recordset がグリッドに表示されるように、フォーム上の Microsoft Bound DataGrid の DataSource としての m_oRecordset1
を削除およびリセットします。
次に、コードは、adMovePrevious 引数を指定した Supports メソッドを使用して Recordset 内を後方に移動できるかどうかを確認します。
ルーチンは、MoveFirst メソッドを使用して最初のレコードに移動し、Field オブジェクトの OriginalValue プロパティと Value プロパティを使用して、フィールドの元の値と現在の値を表示します。 これらのプロパティと UnderlyingValue プロパティ (ここでは使用しません) については、「データの更新と保持」で説明します。
次に、新しい Connection オブジェクトが作成され、データ ソースへの接続を再確立するために使用されます。 Recordset をデータ ソースに再接続するには、新しい Connection を Recordset の ActiveConnection として設定します。 更新をサーバーに送信するために、コードでは Recordset で UpdateBatch を呼び出します。
バッチ更新が成功した場合、モジュール レベルのフラグ変数 m_flgPriceUpdated
は True に設定されます。 これにより、データベースに対して行われたすべての変更を後でクリーンアップするように通知されます。
最後に、コードは Recordset の最初のレコードに戻り、元の値と現在の値を表示します。 UpdateBatch の呼び出し後も、値は同じです。
Recordset の切断中にサーバー上のデータが変更された場合の処理など、データを更新する方法の詳細については、「データの更新と保持」を参照してください。
Form_Unload
Form_Unload サブルーチンは、いくつかの理由で重要です。 まず、これはサンプル アプリケーションであるため、Form_Unload は、アプリケーションが終了する前にデータベースに加えられた変更をクリーンアップします。 次に、コードは、Execute メソッドを使用して、開いている Connection オブジェクトからコマンドを直接実行する方法を示します。 最後に、データ ソースに対して行を返す以外のコマンドのクエリ (UPDATE クエリ) を実行する例を示します。