【Access】連結フォームの作り方

スポンサーリンク

Accessのフォーム(画面)には、連結フォーム非連結フォームというのがあります。

連結フォームと非連結フォームの違いは、テーブルと連結しているか否かという事を意味しています。
連結フォームにするとテーブルを直接操作することになります。
メリットは、作りやすいし入門書にも連結フォームのやり方がメインに書いてあると思います。
デメリットは、複数人で動かすとエラーになりやすいこと、重くなることがあげられます。
最初はお試しで手軽な連結フォームで作成したけれど、いろいろ作りこんで重くなってからだと
改修(作り直し)するのもかなり大変になるので、ここは注意が必要です。

一方で、どういう時に連結フォームを使うのかというと
マスタメンテ画面など簡易的で複数人が同時に使用したり頻繁にデータを変更しないような
画面は、連結フォームで作成するのも手です。
直接テーブルを操作するよりも連結フォームでテーブル操作するほうが手軽だし
何よりもメニューから起動できるので見た目にも良いからです。

<今回やること>
1. マスタテーブルを作成
2. ウィザードを使用して連結フォームを作成

顧客マスタテーブルを作成

テーブル名:m_kokyaku
kokyak_id
kaisha_nm
yubin_no
address_1
address_2
tel
fax
tanto_cd
nyukin_type
nyukinbi

テーブルを作成します

連結フォームを作成

(1)作成>フォームウィザード

(2)使用するテーブルと項目を選択

m_kokyakuテーブルを選択します。

(3)レイアウト選択

単票形式(デフォルト)選択

(4)フォーム名

「F_顧客マスタ」にする
※フォーム名は何でも良いです

(5)顧客マスタ

ウィザードで作成するとこんな感じになります。

これをいろいろ加工していくと下記のようになります。

そのまま使うのではなく必要に応じて加工するのが良いと思います。

■入金タイプ

入金タイプはコンボボックスにします。

■入金日

入金日は日付なので1~31の入力制限をいれます。

VBAコード

連結フォームでも必要なチェックはしたい場合があると思います。
入力途中でテーブルデータが更新されたり追加されないよう
かならず入力させたい項目(必須項目)が全部終わらないと登録しないように制御するには
やはりVBAコードが必要となります。

下記はフォームの挿入前イベントです。
顧客IDが未入力の場合、自動採番するような仕組みにしています

Private Sub Form_BeforeInsert(Cancel As Integer)
   
    If Nz(Me.txt顧客ID.Value) = "" Then
        Me.txt顧客ID.Value = funSaiban_KokyakID
    End If
        
End Sub

次はフォームの更新前イベントです。
入力チェック関数をCALLしてfalse(エラー)なら更新キャンセルします。

Private Sub Form_BeforeUpdate(Cancel As Integer)
    ' 入力チェック
    If funCheckInput = False Then
        Cancel = True
        Exit Sub
    End If
End Sub

連結フォームでも工夫をすれば問題なく操作はできます。

コメント

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