プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。いつもお世話になっております、Access初心者です。

メインフォームからサブフォームを表示するようにしているのですが、
サブフォームのプロパティのレコードソースにローカルで作成した
テーブルを設定してあります。
サブフォームを開くとそのテーブルの内容が表示されますが、
プロパティで更新の許可、削除の許可、追加の許可をすべてはいに
設定していれば、サブフォームに表示されているデータを更新や追加などの
編集を行ったら、自動敵にテーブルに反映されるものと思っていたのですが、
反映されません。
何かコードを書く必要があるのでしょうか?

すみません、よろしくお願い致します。

A 回答 (2件)

テーブルと、そのテーブルをレコードソースとするフォームとを同時に開いた状態で


データの編集を行った場合、上書き更新であればすぐに表示に反映されますが
(→但し、No.1の方が回答されているように、未保存レコードは反映の対象外)、
レコードの削除・追加は自動的には反映されません。
(削除の場合は、行が削除される代わりに、コントロールに「#Delete」を表示)

従って、編集結果を全て反映した表示にするには、コード・マクロの記述が必要に
なります。

サブフォームの親フォーム上のコマンドボタンをクリックにより反映する、という形で
よいのでしたら、以下のようなコードで対応可能です;
(コントロールとしてのサブフォーム名=SF1、展開済のテーブル名=テーブル1、
 コマンドボタン名=DatSync、とした場合)


'~~~以下を貼り付け~~~
Private Sub DatSync_Click()

'実行可否を確認(OKで実行、キャンセルで中止)
IF MsgBox("表示を更新します。",vbOKCancel,"確認")=vbCancel _
Then Exit Sub

'以下の1行により、サブフォームの表示を更新
SF1.Requery

'以下の3行により、テーブルの表示を更新&フォーカスをフォームに戻す
DoCmd.SelectObject acTable,"テーブル1",False
DoCmd.Requery
DoCmd.SelectObject acForm,Me.Name,False

End Sub
'~~~以上を貼り付け~~~

サブフォーム、テーブルの一方のみでよい場合は、不要な方を削除して下さい。
(サブフォームのみならテーブル更新側の3行を、テーブルのみならサブフォーム
 更新側の1行を、それぞれ削除)

なお、この処理を行うと、編集中のレコードは強制的に保存され(値要求が設定
されているフィールドが未入力の場合はエラー発生)、テーブルでは同時に先頭
レコードに移動させられますので、ご注意下さい。
    • good
    • 0
この回答へのお礼

お礼が遅くなりすみません。
大変詳しく分かりやすくお答え頂きありがとうございました。
まだAccessは始めたばかりなのでとても勉強になりました。
ありがとうございます!

お礼日時:2006/12/11 09:33

普通はサブフォームからも入力可能です



反映されませんとはどういう状態でしょう?
エラーにでもなるのですか?

入力しただけじゃ駄目ですよ
入力後レコードを移動、保存コマンドを発行、フォームを閉じる
などのアクションで保存は行われます
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。
ご回答ありがとうございました。
これから色々勉強していきたいと思います。

お礼日時:2006/12/11 09:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A