第2回 Accessで、「得意先マスター保守」処理画面を作成してみる。

第2回目は Accessで、「得意先マスター保守」処理画面を作成してみるです。

「得意先マスター」の保守画面です。

自作のサンプル(得意先マスタ保守)を使用し、「新規入力」処理機能、「削除」処理機能、登録されたデータの読み出し処理、「住所検索」入力機能、「封筒宛名印刷」処理機能、登録済データの「一覧印刷」処理機能について、各機能別にコードを記載します。

t_mast01

データベース処理画面で、最初に作るのが、データエントリー(登録)画面ですね。

第2回目ですので、「新規入力」と「削除」のボタンをクリックされた時のオブジェクトコードについて説明します。


Sponsored Links




1.サンプルプログラムの環境について

・ACCESSのバージョン :2000形式で記載。
(2002、2003でもアプリが動きますので、2000形式で記述します)
・Jetデータベース用の「DAO」を使用して記述します。
注意事項
本連載の「知識レベル」は、「ACCESS」の画面等をウイザードを使用して、画面や帳票が作成することができると云うレベルの方が対象です(あとボタンの取り付け方等も理解している)。

テーブルを定義して、画面のウイザードを使えるのが前提です。
これ以下のレベルですと、「記載する内容が何ページあっても足りません」ので、勘弁してください。

2.サンプルに使用するAccessで作成した処理画面

1)機能内容
・得意先の登録処理機能
・顧客を簡単に呼び出し機能
・「請求書」を郵送するための「封筒印刷」処理が可能です
(住所の入力作業を省力化する機能もあります)。

t_mast01

2)テーブル作成時のデータ項目 情報
・使用するテーブル名  : T_得意先テーブル
・レコードキー     : 得意先ID

3)データ項目
(1)得意先ID
(2)カナ名
(3)得意先名
(4)郵便番号
(5)住所1
(6)住所2
(7)電話番号
(8)FAX番号
(9)備考
(10)敬称

3.「新規入力」ボタン押下時の処理の埋め込み

1)新規入力 ボタン
まず、「新規入力」ボタンをクリックした時の「イベントプロシージャ」を開きます。

ACCESS_iv_pro

2)「新規入力」ボタンをクリックした時の「イベントプロシージャ」コードです。
 「新規入力」ボタンを押されたときの「VBA」コード記述からはじめます。

*************************************************************
Private Sub 新規入力コマンド_Click()
On Error GoTo Err_新規入力コマンド_Click

Dim newBango As Long
Dim db As Database, Rst As Recordset
Set db = CurrentDb
‘ データベースを開く
Set Rst = db.OpenRecordset(“T_得意先テーブル”, dbOpenSnapshot)

‘  登録するレコードのキーを作成
If Not Rst.EOF Then
newBango = DMax(“得意先コード”, “T_得意先テーブル”) + 1
Else: newBango = 1 ‘ レコードが1件もないため
End If

‘  データベースのクローズ処理
Rst.Close: Set Rst = Nothing
db.Close:  Set db = Nothing

Me.AllowAdditions = True

  ‘  新しいレコードを新規作成(追加)する為のコード。
DoCmd.GoToRecord , , acNewRec

  ‘  画面の新規レコードの得意先IDに、先ほど2)で作成した番号をセットする。
得意先コード = newBango

Me.AllowAdditions = False

Exit_新規入力コマンド_Click:
Exit Sub

Err_新規入力コマンド_Click:
MsgBox Err.Description
Resume Exit_新規入力コマンド_Click
End Sub
*************************************************************

3)「新規入力」 ボタン押下時のコードの解説
処理概要
画面上の「新規入力」ボタンが押下された時、テーブル(T_得意先)を読んで、一番大きい得意先IDに+1しておき、新規レコードを起こして、その得意先IDを新規レコードのキーとしてセットする処理です。

これで、新規レコードが1件発生(登録)されて、得意先の各データ項目を入力する状態にします。

(1)データベースを開く
  おきまりのパターンです。
オープンする「テーブル名」を書き換えるだけです。

(2)登録するレコードのキーを作成
DMax」という最大値を取得する関数を使用して、登録されている得意先IDのなかで、
一番大きい数値の得意先IDに+1加算して、新規入力されたレコードのキー(得意先ID)を作成します。

レコードのキーに付いての補足説明
パソコン1台で使用する(スタンドアロン)場合は、良いのですが、Windowsのファイル共有機能を使い、複数台でデータベースを操作する場合には、競合しますので、テーブルのキー項目になる値は、別途テーブルを作成(番号デーブルなど)して、そのから番号を取得して、レコードのキー値を「採番」する方法がベストだと思います。

<例>
‘番号テーブルに+1して、番号テーブルにセット(更新)する。
banngo = banngo+1

‘+1した番号を新規レコードの番号(得意先ID等)に設定する
Newbanngo = banngo
得意先ID = Newbanngo

(3)データベースのクローズ処理
  クローズ処理 これもおきまりの処理です(使用したメモリを解放しているだけです)。

(4)新しいレコードを新規作成(追加)する為のコード。
DoCmd.GoToRecord , , acNewRec

(5)画面の新規レコードの得意先IDに、先ほど2)で作成したIDをセットする。
最後は、得意先名にフォーカスをセットして終了です。

4.「削除」 ボタン押下時の処理の埋め込み

T_masta02

1)「削除」ボタンをクリックした時の「イベントプロシージャ」コード。

*************************************************************
Private Sub 削除コマンド_Click()
On Error GoTo Err_削除コマンド_Click

Beep
If MsgBox(“表示中の得意先情報を削除します。”, vbYesNo + 64 + vbDefaultButton2, “削除”) = vbYes Then
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True

End If

‘最後のレコードに移動
DoCmd.RunCommand acCmdRecordsGoToLast

Exit_削除コマンド_Click:
Exit Sub

Err_削除コマンド_Click:
MsgBox Err.Description
Resume Exit_削除コマンド_Click

*************************************************************

2)「削除」 ボタン押下時のコードの解説

(1)’削除処理を実施する前に、「確認メッセージ」画面を表示して、「Yes/No」を選択させる。

削除処理は、ほとんどこのパターンで、COPYして貼り付ければ、完成します。

「はい(Y)」のボタンを押下したときに、表示中のレコードを削除する。

5.「得意先呼出」ボタン押下時の処理の埋め込み

せっかく、たくさん登録された「得意先データ」を、すぐに探し出せないと、意味がありませんよね。 そこで、エントリーしたデータを素早く、検索、表示する為の処理方法です。

上記の画面では、抽出条件が「得意先名」1つですが、複数の条件を設置することも可能です。尚、「フォーム」の作成に関しては、自分でACCESSのウイザードを使用して簡単に作成してください。

toku21

1)処理機能の説明
(1)「得意先マスタ」画面で、「得意先呼出」のボタンを押されたときに、「得意先検索」画面を表示します。

(2)「得意先検索」画面で、「得意先名」入力欄に入力する。
この抽出処理は、あいまい検索可能にしてありますので、名前の途中の文字(連続している文字列であれば可能)でも、該当すれば表示することが可能です。

(3)「得意先検索」画面で、「抽出」ボタンを押すと、該当の得意先名を一覧表示する。

(4)表示中のデータの中から、該当の得意先名を選択クリックすると、「得意先検索」画面を閉じて、「得意先マスタ画面」に該当データを表示する。

こうすることにより、大量に登録された得意先を「あいまい検索」で呼び出し、素早く選択、表示することが可能になります。

2)「得意先呼出」のボタンを押されたときに、「得意先検索」画面を表示するコードです。

*************************************************************
Private Sub コマンド31_Click()
On Error GoTo Err_コマンド31_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = “F_得意先読出フォーム”
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_コマンド31_Click:
Exit Sub

Err_コマンド31_Click:
MsgBox Err.Description
Resume Exit_コマンド31_Click

End Sub
*************************************************************

解説:
呼び出すフォーム名を書き換えて、そっくりそのままコピーすればできあがりです。

「On Error GoTo~」のコードは、エラー処理の定番で、エラーメッセージを表示して処理を終了させる。

3)「得意先検索」画面で、「抽出」ボタンを押すと、該当の得意先名を一覧表示するコード。
*************************************************************
Private Sub コマンド10_Click()
On Error GoTo Err_コマンド10_Click

‘変数を宣言し、空の文字列を代入
Dim stCri As String

stCri = “”

‘[顧客名検索]が空の文字列ではないとき、変数に条件を格納
If (Me.得意先名検索 <> “”) Then
stCri = stCri & “[得意先名] Like ” & ” ‘*” & Me.得意先名検索 & “*'”
End If

抽出処理:
Me.Filter = stCri
Me.FilterOn = True

コマンド10_Click_Exit:
Exit Sub

Err_コマンド10_Click:
MsgBox Error$
Resume コマンド10_Click_Exit

End Sub
*************************************************************

解説

検索用の項目名          : 得意先名検索
得意先テーブルの項目名 : 得意先名
——————————————————-
(1)[顧客名検索]が空の文字列ではないとき、変数に条件を格納
・”得意先名検索”が空白でなければ、「stCri」に入力された抽出条件を設定する。
ここの部分のコードも、「あいまい」検索機能を持った「定番」のコードですのでCOPYすればOK。

(2)抽出処理:
そして、フィルターにセットして、フィルターをオンにすると抽出されて一覧に表示されます。

<補足>
抽出後のデータを印刷したい場合、印刷処理ボタンを配置して一覧印刷処理を追加することもできます。

4)「得意先検索」画面で、表示中のデータの中から、該当の得意先名を選択クリックすると、「得意先検索」画面を閉じて、「得意先マスタ画面」に該当データを表示する。

*************************************************************
Private Sub 得意先名_Click()

Call 読出ボタン_Click

End Sub

Private Sub 読出ボタン_Click()

On Error GoTo Err_読出ボタン_Click

If IsLoaded(“F_得意先フォーム”) Then

Call Form_F_得意先フォーム.Find_Record(Me!得意先ID)

End If

DoCmd.Close acForm, “F_得意先読出フォーム”
Exit Sub

Err_読出ボタン_Click:

End Sub

*************************************************************

1)解説
得意先名をクリックされたとき、関数 Find_Recordに得意先IDをセットして渡す。
すると、「得意先マスタ」画面に該当データが表示されます。

検索画面を閉じて終了します。

2)解説
「得意先マスタ」画面のイベントプロシージア内に埋め込む

「得意先マスタ」画面に埋め込む、自作関数コード
——————————————————–
Public Sub Find_Record(i As Long)
If Nz(i) = 0 Then Exit Sub

Me.SetFocus
Me!得意先ID.SetFocus
DoCmd.FindRecord i, acAnywhere, False, acDown, False, , True
End Sub
———————————————————-

データのエントリー画面処理には、なくてはならない処理ですね。
このパターンを覚えると、色々な場所で役に立つと思いますので、トライしてみてください。

AccessのVBAを習得するには、上記の参考書がお勧めです。
関連記事
第1回 マイクロソフト ACCESSでデータベースを作成するには
第3回 Accessで、「得意先マスター保守」処理画面を作成してみる。
第4回 マイクロソフト ACCESS(アクセス)でデータベースを作成 検索・抽出処理
第5回 Access2010でパスワード管理データベースを作成してみよう。
第6回 EXCELで作成した住所録をAccess2010に取り込んではがき宛名印刷をしてみる。

関連記事
Access 2013 の新機能とAccess 2013 で廃止、変更された機能とバージョンアップの必要性について
マイクロソフト、「Access」の便利な機能を使って、業務アプリケーションを作成して活用する。

第1回 ACCESS(アクセス)データベース作成ソフトについて
第2回 ACCESS(アクセス)データベース作成ソフトについて
第3回 ACCESS 2007の情報
第4回 ACCESS トラブル対処の情報1「mdbが壊れてしまった時」
第5回 ACCESSを「ファイル共有」で使用する場合の注意事項
第6回 ACCESS トラブル対処の情報2 「メモリ不足」エラーについて
第7回 ACCESSで Jet 4.0 データベースの動作環境を最適に保つ方法
第8回 Access 2000とMSDEを利用してクライアント/サーバーシステムを構築する
第9回 ACCESS 2010の情報
第10回 Access2000(mdb)からAccess2010(accdb)に変換する

Sponsored Links




コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*