質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

3回答

1344閲覧

Accessにてメインフォームを更新した際にサブフォームが更新できなくなってしまう。

help_

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/05/29 03:08

編集2020/05/29 07:24

現在Accessにて業務アプリケーションの作成を行っております。

つくりとしては単票フォームの編集画面内に紐づいた帳票フォームをサブフォームを表示しています。

---------単票フォームA-----------| | | | -----帳票フォームB-----| | | | | | | | | | | | | | | | | | -----------------------------------

単票フォームAを新規で開き値を入力した際
帳票フォームBの値が入力できなくなってしまいます。

Aの既存データを編集で開いた場合や新規で開いた後何も入力する前であれば
Bの値を変更することができるのですが、A変更後にBが触れなくなってしまいます。

どのように調べればいいかもわからず困っています。
単票フォームAのDBKeyを帳票フォームBのDBにリレーションを張っています

A-DB
AID オートナンバー
Column1 数値型
Column2 文字列型

B-DB
BID オートナンバー
AID-リレーション 数値型
Column3 数値型
Column4 文字列型

単票フォームA
データソースA-DB

帳票フォームB Aのリレーションに紐づいて表示
データソースB-DB

どうぞよろしくお願いいたします。
Access2019、Windows10を利用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

メインフォーム/サブフォームの作成手順を再確認されたら如何でしょうか。

【リレーションシップ作成時】
1.B-DB(AID-リレーション)とありますが、A-DBにキー値なしでリレーション出来ましたか。
(A-DBにキー無いとできない様な気がします。)
2.リレーション作成時に、参照整合性/フィールド連鎖更新/レコードの連鎖削除にチェック入りましたか。
3.2までOKなら。A-DBテーブルを見るとB-DBが下部へ結合して見えます。
【サブフォーム作成時】
1.クエリの作成。A-DB+B-DBでクエリを作成。
(キーは勝手に入り結合されます。)
2.フォームの作成。上記作成クエリを指定して、フォームのウィザードより作成。
ウィザードより作成することで、サブフォームの選択画面が表示されます。
選択画面が無ければ、その前の手順に誤りがあります。

キー値の指定が怪しい感じはします。
A-DBキー:AID
B-DBキー:AID・BID
が一般的かと思いますので、上手く行かない様でしたらやってみてください。

p.s.
私自身はリレーションシップを使ってシステム作成した経験がありません。
参考程度の情報となります。

投稿2020/05/29 07:49

tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

メインフォームとサブフォームのレコードソースで指定している中に同じテーブル(クエリーであればそのクエリーの中も含む)が存在していませんか?

そうであれば、競合が発生していると思われます。

該当しているようであれば以下を参考に。
データの競合メッセージを無視するには?

投稿2020/05/29 04:44

編集2020/05/29 04:46
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

help_

2020/05/29 05:06

該当のコードを実装しましたがエラーの発生は認められませんでした。
sazi

2020/05/29 06:54

競合は発生する状況ですか?
help_

2020/05/29 06:56

競合自体は発生していないと考えられます。 ただAを変更することで紐づけて開かれていたBに影響が出ているのでは、と思っています。
sazi

2020/05/29 07:05 編集

取り敢えず、フォームの更新後処理で、サブフォーム.requeryを行ってみてはどうでしょうか。 また、単に別なテーブルを単体で指定しているという事でなければ、レコードソースは具体的に示して下さい。
help_

2020/05/29 07:22

サブフォームのRequeryは行っていますが入力等できなくなってしまうままです。
sazi

2020/05/29 07:26

メインフォームではどのような更新を行うのでしょうか? その更新項目が、サブフォームの連結項目であるなら、サブフォームは追加を許していますか? ※質問をスルーされていますが、全て答えて下さいね。
help_

2020/05/29 07:58

すいませんレコードソースを具体的に、がよくわかりませんでした。 自分なりに質問自体に編集を加えましたが結果的にスルーしてしまっていたようで申し訳ありません。 メインフォームではA-DBの内容の編集登録を行います。 サブフォームではA-DBに紐づいたB-DBデータの登録編集を行います。 質問としてはA-DBの内容の変更を行うとB-DBの変更が行えなくなってしまうという内容でした。 サブフォーム内での追加などは許可している状態でしたが、 Cancel=Trueによって変更中のA-DBの項目がロックされることでB-DBが編集できなくなってしまっていたようです。
sazi

2020/05/29 08:02 編集

質問される方は適当な内容とされる方が多いので、確認したかったのです。 作り方ならそれでもいいですけど、エラーとか動きがおかしいなどの場合は、実際の情報を提示して貰わないと横道にそれる事が多いもので。
help_

2020/05/29 08:25

なるほど、丁寧に付き合ってくださってありがとうございました。 今後質問する際に気を付けたいと思います!
guest

0

自己解決

VBA

1'フォームの更新前処理 2Private Sub Form_BeforeUpdate(Cancel As Integer) 3 Cancel = True 4End Sub

保存以外では保存できないように上記処理を加えていましたが、これを外すことで
値変更後も編集できるようになりました。
お騒がせしました。
回答してくださったsaziさん誠にありがとうございました。

投稿2020/05/29 07:31

help_

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問