- ベストアンサー
Access 2010のフォーム
いつも大変おせわになり、ありがとうございます。 Access 2010でフォーム「F」を作りました。具体的には リレーションシップのある「A」, 「B」ふたつのテーブルにフォームから値入力するものです。 「A」と全く同じ構造で、レコード数が違うだけのテーブル「Aダッシュ」を作りました。 フォームFに変更を加え、「A」ではなく「Aダッシュ」に値入力するようにしたいです。 Access上でどうやれば、そのような変更が加えられるのか、よくわかりません。 ご指導のほど、よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
単純には、2通り 1 フォームをコピーする。 コピーしたフォームをデザインビューで開くと、横にプロパティシートというのが出ますので、 プロパティシートのデータタブを開く。 その一番上のレコードソースを、「テーブルA」から「テーブルA’」に変更する。以上 2 同じフォームを使って切り替える。 1の方法ではフォームに直しを入れたときに、コピーしたフォームも同じように変更しなければなりません。 同じフォームでデータの中身だけ変える時は、例えばコマンドボタンを2つ使って切り替えるようにします。 デザインビューでボタンを作って、プロパティを開き、イベントからクリック時の欄の右横の「・・・」というボタンを押し VBAコードを入力します。 例えば、 Private Sub コマンド0_Click() Me.RecordSource = "テーブルA" 'またはテーブルA' Me.Refresh End Sub (本当は、エラートラップを作るのが流儀ですが、ここでは省いています) ところで、AとBの間にリレーションシップがあるということですが、A’とBの関係はどうなるのでしょう。Bを放置すると矛盾が生じるような気もしますし、B’を作るのであれば、上記「2」の方法では、少々一手間加えなければなりません。 AとBが一対一の関係であればクエリーを組んでそれをレコードソースにすれば良いですし、AとBが一対多の関係で、フォームにサブフォーム(レコードソースはテーブルB)が配置されているのであれば、「2」のコードにもう一手間必要になります。 理解度にもよりますので、一回目の回答はとりあえずここまでにしておきますが、必要に応じて補足にてご質問ください。
補足
大変丁寧なご回答ありがとうございました。 ご指摘のとおり、理解力が足りず、第1の方法に従いました。 確かにテーブルA’の値は正しくフォーム上に表示されました。 しかし、それとリレーションシップのあるBの値は表示されず #Name? となりました。 「フォームのプロパティ」⇒「データ」⇒「レコードソース」 の右横にある「...」を押すとクエリービルダなるものが開かれましたが、ここにBが表示されていませんでした。 このクエリービルダ上でもBをA’に関連づけ、しかるのに 表示したいBのデータ項目も選択しないといけない、ということでしょうか(マニュアルで)。。結構、ややこしいですね。 ひきつづきご指導お願いいたします。