レコードセット: クエリの再実行 (ODBC)

このトピックの内容は、MFC ODBC クラスに該当します。

このトピックでは、レコードセット オブジェクトを使ってデータベースからそれ自体の再クエリ (つまり更新) を実行する方法と、Requery メンバー関数でそれを行うことが必要になる可能性がある状況について説明します。

レコードセットの再クエリを行う主な理由は次のとおりです。

  • 自分や他のユーザーが追加したレコード、および他のユーザーが削除したレコードで、レコードセットを最新の状態にします (自分で削除したレコードは既にレコードセットに反映されています)。

  • パラメーターの値の変更に基づいてレコードセットを更新します。

レコードセットを最新の状態にする

多くの場合、レコードセット オブジェクトを最新の状態にするために、再クエリが必要になります。 マルチユーザー データベース環境では、自分のレコードセットの有効期間中に、他のユーザーがデータを変更する可能性があります。 他のユーザーによって行われた変更が自分のレコードセットに反映されるときと、自分の変更が他のユーザーのレコードセットに反映されるときについて詳しくは、「レコードセット: レコード更新のしくみ (ODBC)」と「ダイナセット」をご覧ください。

新しいパラメーターに基づく再クエリ

もう 1 つのよくある、そして同じように重要な Requery の使用は、パラメーターの値の変更に基づいて新しいレコードのセットを選ぶ場合です。

ヒント

クエリの速度は、Open を再び呼び出す場合より、パラメーターの値を変更して Requery を呼び出す方が、おそらく大幅に速くなります。

ダイナセットとスナップショットの再クエリ

ダイナセットは動的な最新データを含むレコードのセットを提示することを目的としているため、他のユーザーの追加を反映する場合は、ダイナセットの再クエリが必要になることがよくあります。 一方、スナップショットは、レポートの準備や、合計の計算などを行っている間、静的コンテンツに安全に依存できるので便利です。 それでも、スナップショットの再クエリが必要になることがあります。 マルチユーザー環境では、他のユーザーがデータベースを変更すると、スナップショットのデータとデータ ソースとの同期が失われることがあります。

レコードセット オブジェクトの再クエリを行うには

  1. オブジェクトの Requery メンバー関数を呼び出します。

または、元のレコードセットを閉じて開き直すのでもかまいません。 どちらの方法でも、新しいレコードセットにはデータ ソースの現在の状態が表示されます。

例については、「レコード ビュー: セカンド レコードセットを利用してリスト ボックスを表示する方法」をご覧ください。

ヒント

Requery のパフォーマンスを最適化するには、レコードセットのフィルターまたは並べ替えを変更しないようにします。 Requery を呼び出す前に、パラメーターの値のみを変更します。

Requery の呼び出しが失敗した場合は、呼び出しをやり直すことができます。そうでなければ、アプリケーションは正常に終了するはずです。 Requery または Open の呼び出しは、いくつかの理由により失敗する可能性があります。 ネットワーク エラーが発生する場合があります。または、既存のデータがリリースされた後、新しいデータが取得される前に、別のユーザーによって排他アクセスが取得される可能性があります。または、レコードセットが依存しているテーブルが、削除されることもあります。

関連項目

レコードセット (ODBC)
レコードセット: データ列を動的に結びつける方法 (ODBC)
レコードセット: レコードセットの生成と破棄 (ODBC)