ACCESSプロジェクト作成のメモ(2)

ServerFilter(サーバーフィルタ)
ServerFilter プロパティにより、Access プロジェクト フォームに表示されるデータがフィルタにかけられます。
SQL ステートメントの WHERE 句で条件を指定するのと同じ構文を ServerFilter プロパティに使用します。
プログラミング コードの中で ServerFilter プロパティの値を設定する場合、レコードセットを更新するには、フォームの Requery メソッドを呼び出す必要があります。
ServerFilter プロパティは、レコード ソースとしてストアド プロシージャを使用するフォームには影響を与えません。

Me.ServerFilter = "State='NV'"
Me.Requery

ServerFilterByForm(フォームサーバーフィルタ)
ServerFilterByForm プロパティには、フォーム サーバー フィルタ モードでフォームを開くかどうかを指定します。
このプロパティを Yes に設定すると、フォームはフォーム サーバー フィルタ モードで開かれます。
フォームが最初に開かれたときに、フォームのレコードソースから取得される行はありません。
このモードでは、フォームのフィールドにフィルタ条件が入力できます。
その後、ツール バーの [サーバー フィルタの適用] をクリックして、フィルタを適用します。
ServerFilterByForm プロパティは、レコードソースとしてストアド プロシージャを使用するフォームには影響を与えません。

Me.ServerFilterByForm = True

UniqueTable(固有のテーブル)
UniqueTable プロパティは、フォームが複数テーブルのビューやストアド プロシージャに連結されるときに更新されるテーブルを指定します。
フォームのフィールドに結合してデータを取得する場合、Access に対して、どのテーブルにレコード ソースの行が重複せずに含まれているかを指示しなければなりません。
重複しないテーブルはリレーションシップの “多” サイドにあり、 UniqueTable プロパティを設定すると、更新できます。

ResyncCommand(再同期コマンド)
ResyncCommand プロパティには、フォームのレコード ソースが複数テーブルのビューやストアド プロシージャに基づいている場合に、リレーションシップの “一” サイドにあるフィールドを更新するために、Access で使用される SQL ステートメントを指定します。
ResyncCommandプロパティの目的は、サーバー データベースにデータが保存された後の、更新されたデータの取得方法を指定することです。
このプロパティは、リレーションシップの “多” サイドにある更新可能なテーブルを指定する UniqueTable プロパティと共に動作します。
ResyncCommand プロパティを使用するには、フォームのレコードソースで使用されている SQL ステートメントとまったく同じ SQL ステートメントを指定する必要があります。
ただし、特定の値やパラメータの代わりに疑問符 (?) を使用して、 UniqueTable プロパティで指定されたテーブルのキー列を指定する WHERE 句を追加する場合は例外です。

たとえば、すべての講座名と共に、講座を担当するインストラクタに関する情報が表示されたフォームを作成するとします。
このためには、次のような SQL ステートメントを持つストアド プロシージャを記述します。

SELECT A.FirstName, A.LastName, B.*
 FROM Instructors AS A RIGHT OUTER JOIN Courses AS B
 ON A.InstructorID = B.InstructorID

レコード ソースとして上記を指定した場合、このステートメントに結合が含まれているため、フォームの UniqueTable プロパティを Courses テーブルに指定する必要があります。
フォームを開くと、Courses テーブルと連結したフィールドのみが更新可能で、Instructors テーブルと連結したフィールドは更新できないことがわかります。
さらに、Courses テーブルのInstructorID フィールドの値を変更した場合、変更は受け付けられますが、変更内容は表示されません。
これは、 ResyncCommand プロパティにより、Access にフォームを更新する方法を指示していないためです。
変更内容を表示させるためには、レコードソースに指定したステートメントに”?”(Courses テーブルのキー フィールド) を指定したWHERE 句を追加し、ResyncCommand プロパティに指定します。

SELECT A.FirstName, A.LastName, B.*
 FROM Instructors AS A RIGHT OUTER JOIN Courses AS B
 ON A.InstructorID = B.InstructorID
 WHERE B.CourseID = ?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です