- ベストアンサー
Access VBA サブフォームの更新
こんにちは。いつもお世話になっております、Access初心者です。 メインフォームからサブフォームを表示するようにしているのですが、 サブフォームのプロパティのレコードソースにローカルで作成した テーブルを設定してあります。 サブフォームを開くとそのテーブルの内容が表示されますが、 プロパティで更新の許可、削除の許可、追加の許可をすべてはいに 設定していれば、サブフォームに表示されているデータを更新や追加などの 編集を行ったら、自動敵にテーブルに反映されるものと思っていたのですが、 反映されません。 何かコードを書く必要があるのでしょうか? すみません、よろしくお願い致します。
- みんなの回答 (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行を、それぞれ削除) なお、この処理を行うと、編集中のレコードは強制的に保存され(値要求が設定 されているフィールドが未入力の場合はエラー発生)、テーブルでは同時に先頭 レコードに移動させられますので、ご注意下さい。
その他の回答 (1)
- CHRONOS_0
- ベストアンサー率54% (457/838)
普通はサブフォームからも入力可能です 反映されませんとはどういう状態でしょう? エラーにでもなるのですか? 入力しただけじゃ駄目ですよ 入力後レコードを移動、保存コマンドを発行、フォームを閉じる などのアクションで保存は行われます
お礼
お礼が遅くなり申し訳ありません。 ご回答ありがとうございました。 これから色々勉強していきたいと思います。
お礼
お礼が遅くなりすみません。 大変詳しく分かりやすくお答え頂きありがとうございました。 まだAccessは始めたばかりなのでとても勉強になりました。 ありがとうございます!