【Access】Accessの連結フォームと非連結フォーム

Accessのフォームには連結フォームと非連結フォームというのがあります。
Accessの連結フォームと非連結フォームについて思う事を書きたいと思います。

連結フォームとは

連結フォームとは、テーブルと連結されたフォームのことを言います。
見た目はフォーム(画面)ですが、イメージとしてはテーブルを開いて直接編集しているようなものです。

連結フォームのメリット

連結フォームのメリットは、使い勝手の良さと思います。
マスタメンテ等、項目数やレコード数が少ないものを扱う画面に利用することが多いです。
連結フォームで値を変更すると、即テーブルに値が反映されます。

連結フォームのデメリット

連結フォームのデメリットは、複数人で同時使用している時に重くなることです。
どうして重くなるかというと、ロックが掛かるからです。
Aさんが連結フォームを開く、BさんもAさんと同じ連結フォームを開く
Aさんが編集、Bさんも編集・・Bさんの画面が重くなりなかなか反映されない。

ということが多々発生します。時にエラーになることも。
複数の人が同時に1つのテーブルデータを編集するのは、ロックがかかり
テーブルに負荷を与え、Accessが破損しやすい要因にもなるので注意が必要です。

しかし、割と連結フォームで作成されている画面は多いです。
にわかプロが連結フォームで画面作成しているのを見ると少し怒りの感情がわきます。
連結フォームとかクエリだけでVBAなしで作成するのはプロと言いません。

非連結フォームとは

非連結フォームとは、Access独自の連結フォーム機能ではなく
一般的なVBと同じように、表示時にはSQLを発行して
各テキストに取得した値をセットする処理を入れる必要があります。
当然、登録時と更新時にSQLを発行して更新する必要もあります。

非連結フォームのメリット

メリットは何よりも汎用性の高さです。
入力した時に即、テーブルに反映するのではなく
全部入力して更新ボタン押下で入力チェックしてOKなら更新したい等に使います。
複数人での同時使用に適しています。
トランザクション制御は複数テーブルを一気に更新して最後にコミットも可能です。

非連結フォームのデメリット

VBAを駆使しなければならず、やや敷居が高く感じる。
コントロール1つ1つに名前を付けないといけないので面倒
insert , update, delete selectすべてVBAに記述しなくてはいけないので面倒。

連結フォームを非連結フォームに変換するには?

連結フォームを非連結フォームに変換するのは非常に大変です。
まず、非連結フォームの場合、各テキストに名前を付けます。
つけた名前をVBAで使用します。
コントロールソースを1つ1つ外していきます。
表示・追加・更新・削除すべてSQLが必要になります。

ということでかなり面倒です。

まとめ

既に作成されたAccessの修正の場合、連結フォームだったらそのまま修正します。
連結フォームを非連結フォームに替えるという事は依頼されなければしません。
なぜならば、既存処理が失われ、すべて作り直しという意味合いになるからです。
修正依頼の内容が作り直しであれば良いですが、一部修正という依頼であれば
全部作り直す必要性も意味も何もなくなるからです。
連結フォームは上手く使えばメリットもあります。
複数人で同時使用して重くなっているシステムであれば、別途提案します。

新規に作成する場合、マスタメンテなら連結フォーム
それ以外のトラン系入力であれば非連結フォームを使用しています。

Accessでシステムを作成するとき、連結フォームとマクロとクエリだけでも
それっぽいシステムは作成できます。しかし検索時に曖昧検索をしたいや複合検索をしたい場合等
VBAを使わないと細かい作業ができない事も多々とあります。
そういう細かい修正依頼は、自分で調べるよりもプロに依頼するほうが早いと思います。

2022/9/19追記

今現在は、マスタメンテ画面でも非連結フォームは使用しなくなりました。
非連結フォームを使用する時は、ワークテーブル(wk_XXXX)を作成しておいて
そこに入力用データをdelete~insertして自由に入力してもらう際に使います。
帳票フォームやレポートなどで応用します。
登録時にこのワークテーブルから本当のテーブルにデータをupdate or insertします。
ここの処理がかなり面倒です。

コメント

タイトルとURLをコピーしました