Microsoft Access 掲示板

リレーショナルで連鎖削除すると、#DELETEDと表示される / 12

12 コメント
views
4 フォロー
12
hiroton 2020/07/16 (木) 11:35:26 f72e8@f966d

コントロール(コントロールソース)の理解があやふやな感じですねぇ
コントロールはコントロールソースの設定によって3種類の動作をします

1.コントロールソースにフォームのレコードソースのフィールドを指定する

指定したレコードソースのフィールドそのものにリンクされます。
現在のレコードの(指定したフィールドの)値が表示され、このコントロールを更新するとデータが書き換わります
(フィールドがクエリの計算式などの場合、編集不可だったりもします)

2.コントロールソースに計算式を指定する

計算式に従った結果が表示されます。
編集不可です。このコントロールが直接データを書き換えることはありません

3.コントロールソースに非連結を指定する

フォーム上で任意で編集ができるコントロールです。
このコントロールが直接データを書き換えることはありません
今回の例のように、表示したい個人IDを入力したり、検索用のキーワードを入力するテキストボックスを設置するときに使います。
非連結のコントロールは、ユーザーが一時的に使いたいデータを入力するためのコントロールとなります。


また、上記はコントロールの(value)に関する話で、いろいろな制御にかかわる各種プロパティは、別物です

DoCmd.OpenForm "ユーザー情報編集フォーム", , , "個人ID=" & Me.PF_CMB_個人ID.Value

これの第4引数("個人ID=" & Me.PF_CMB_個人ID.Value)はフォームのFilterプロパティに値を設定する指定です。
これ自体は何かデータを書き換えるようなことはしません。(コントロールに値を設定するようなこともありません)


サブフォームのデータを絞り込むときには

    Me!SubForm.Form.Filter = strFilter
    Me!SubForm.Form.FilterOn = True

としました。今回はフォームが別になるので、同様に考えるなら

    Forms!ユーザー情報編集フォーム.Form.Filter = strFilter
    Forms!ユーザー情報編集フォーム.Form.FilterOn = True

とすることができます。
ただし、フォームを新たに開くなら、hatenaさん提示のように同時に設定できるので

DoCmd.OpenForm "ユーザー情報編集フォーム", , , "個人ID=" & Me.PF_CMB_個人ID.Value

とできます。

同じことをしているとわかれば、個人IDを直接変更しているものではないとわかると思います。
各コントロールは、処理毎に、冒頭のコントロールのルールに従って内容を再表示します。
レコードの絞り込みの結果、現在のレコードが変更になれば、変更後のレコードの値を表示しなおします。

Excel的に言えば、見ている行が変わったというだけでデータそのものが変わったわけではありません。行が変わったので、その行の値をそれぞれ表示しなおしているだけです。

通報 ...