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