SSブログ

フォーム RecordsetType・レコードセット プロパティ [フォーム]

 フォームのプロパティで、「データ」タブにある「レコードセット」についてです。

 あまりこの項目を意識する必要はないと思うのですが、いちおうどんな物か知っておくと良いと思います。

 設定できる内容は、以下の3つ。

設定値 内容
ダイナセット 1 つのテーブルまたは一対一のリレーションシップが設定されたテーブルのフィールドに連結されているコントロールを編集できます。一対多のリレーションシップが設定されたテーブルのフィールドに連結されているコントロールの場合は、テーブル間で連鎖更新 (連鎖更新: テーブル間に参照整合性が設定されているリレーションシップにおいて、主テーブルでレコードを変更すると、関連テーブルのすべての関連レコードが更新されることです。)が有効に設定されていない限り、"一" 側の結合フィールドからデータを編集することはできません。(既定値)
ダイナセット (矛盾を許す) フィールドに連結されたすべてのテーブルとコントロールを編集できます。
スナップショット フィールドに連結されたテーブルまたはコントロールは編集できません。

 内容は、ヘルプから引用しました。
 各設定値の内容を、順に説明します。

・ダイナセット

 デフォルトはこの設定になっています。
 データソースのクエリで、テーブルを連結している場合、1対1の場合は結合項目の値を直接変更することが可能です。
 1対多の場合は、「1」側の結合項目の値を変更することはできません。
 ただし、リレーションシップの設定で、連鎖更新の設定がされている場合は、変更可能です。

 具体的には、以下の通り。

 データは、都道府県テーブル(TMTDFK)と地方テーブル(TMCHIHO)。
 都道府県テーブルには、地方コード(CHIHOCD)項目があり、都道府県がどの地方になるのかを示します。
 地方テーブルは、地方コードと地方名の一覧です。

 このテーブルをクエリで結合して利用します。
 都道府県テーブルの地方コードで、地方テーブルを参照し、地方名をひっぱってきます。
 この場合、地方テーブルが「1」、都道府県テーブルが「多」となる、1対多の結合です。
 リレーションシップは設定していません。

 このクエリを元に、フォームを作成します。

 左側の3項目は、都道府県テーブルの項目です。
 右側の2項目は、地方テーブルの項目です。

 1対多の、「1」側の項目である、地方テーブルの地方コードを変更しようとします。
 そうすると、下のステータスバーに、変更できない旨のメッセージが表示されます。
 ダイナセットが指定されている場合は、このような制御がかかります。
 ちなみに、「多」側である、都道府県テーブルの地方コードを変更しようとすると、

 変更可能です。「2」「東北地方」を「3」に変更したので、「関東地方」の表示に変わりました。

 ちなみに、地方マスタに存在しない地方コードに変更しようとすると、上図のエラーが表示され、変更できません。

・ダイナセット (矛盾を許す)

 「矛盾を許す」とあるとおり、先程より緩くなっています。

 上図の地方コードの値を「9」に変更しようとしています。
 この変更を確定した直後、

 地方テーブルの地方コード「2」で表示されていた項目が、すべて「9」に変更されました。
 このデータのクエリは、「都道府県」テーブルの「地方コード」と、「地方」テーブルの「地方コード」で結合されているので、「都道府県」テーブルの「地方コード」が「2」で、「地方」テーブルの「地方コード」が「9」となっている上図の状態は、正しくリンクされた状態となっておらず、「矛盾」しています。

 この状態で、リクエリを行うと、

 先程の矛盾が起きていた結合のレコードが、表示されなくなりました。
 INNER JOINなので、アンマッチの行は、表示されません。

 地方テーブルの内容を確認すると、地方コードが「2」だった東北地方が、「9」に更新されています。

・スナップショット

 スナップショットが設定された場合、データは変更できなくなります。

 項目を変更しようとすると、ステータスバーに「このレコードセットは更新できません。」と表示されます。
 データを更新させたくない場合に、この設定が利用できると思います。

 フォームのプロパティに、「追加の許可」「削除の許可」「更新の許可」という項目があり、ここでも制御できますが、スナップショットにした場合、クエリ自体が読込のみで実行されると思われ、排他制御の対象外になり、内部的にいろいろ処理が省けて、処理がかるくなるのではと思います。(確証なし)


 また、クエリのプロパティにも同様に「レコードセット」の項目があります。
 クエリを更新不可にしたい場合には、スナップショットの設定が利用できます。

 フォームのレコードセットが「ダイナセット」で、レコードソースに指定されているクエリのレコードセットが「スナップショット」だった場合、フォーム側の設定が優先されて、レコードは更新可能となるようです。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。