So-net無料ブログ作成

フォーム 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」に更新されています。

・スナップショット

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

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

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


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

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



【2万円から3万円の、格安ホームページ作成サービス】

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

nice! 0

コメント 0

コメントを書く

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

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

トラックバック 0

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