データ登録フォーム 2画面版 その2 一覧画面から入力画面へ [Form登録二画面版]
まずは一覧画面から行きます。
このタイプの画面についての説明は、「データ一覧フォーム」等をご参照ください。ここでは、メンテ画面機能に絞って説明します。
まず、「新規登録」ボタン。
新規にマスタを登録するときの画面を呼び出します。
何も入っていない入力画面を表示するだけです。
次に、「編集」ボタン。
クリックされた行のレコードを編集する場合は、こっちをクリックします。
クリックされたレコードの内容がセットされた入力画面が表示されます。(その後、必要な箇所を入力して、変更登録します。)
どちらも DoCmd.OpenForm で入力画面を開く処理を行います。その後、「編集」の場合は、該当レコードの内容を取得して、画面にセットする処理を行います。
その処理までこのボタンのイベントに書いても良いのですが、DoCmd.OpenForm は、フォームに対して引数を渡すことができるので、これを利用して後の処理はオープンされるフォームにまかせる形で、処理を作ります。
DoCmd.OpenForm の構文
DoCmd.OpenForm formname[, view][, filtername][, wherecondition][, datamode][, windowmode][, openargs]
formname が、オープンするフォームの名前で、あとはだいたい省略で、一番最後の openargs がフォームに渡す引数になります。
では、コーディング。
「新規登録」ボタンクリック時のイベント
Private Sub cmdENT_Click()
'新規登録ボタン クリック
DoCmd.OpenForm "FMCUS030"
End Sub
「FMCUS030」が、入力画面のフォーム名です。新規登録の場合は、引数なしで呼び出します。
次に、「編集」ボタンクリック時のイベント。
Private Sub cmdUPD_Click()
'編集ボタン クリック
DoCmd.OpenForm "FMCUS030", , , , , , Me.txtCUSCD
End Sub
引数として、選択されたレコードの、得意先コードを指定しています。この例の得意先マスタは、得意先コードがKEYになっています。引数項目はひとつしかないので、KEYが複数項目で構成されている場合は、工夫が必要になります。項目を連結した固定長と言うことにして、受け取り側で切り分けるとか。
ここから先は、入力画面フォームの処理です。
こっちの画面の Form_Open イベントで、続きの処理を行います。
Private Sub Form_Open(Cancel As Integer)
'フォームオープン 初期化処理
Dim Cn As ADODB.Connection
Dim recA As New ADODB.Recordset
'1)画面最大化と項目クリア
DoCmd.Maximize
Call subCLR
'2)引数確認
If IsNull(Me.OpenArgs) = True Then
Exit Sub
End If
'3)変更レコード取得
Set Cn = CurrentProject.Connection
recA.Open " SELECT * FROM TMCUS " & _
" WHERE CUSCD = " & Me.OpenArgs, Cn, adOpenForwardOnly,
adLockReadOnly
If recA.EOF = True Then
MsgBox "変更レコードが見つかりません。", vbCritical
recA.Close
Exit Sub
End If
'4)項目セット
Me.txtCUSCD = recA!CUSCD
Me.txtKANJIMEI = recA!KANJIMEI
Me.txtKANAMEI = recA!KANAMEI
Me.txtZIPCD = recA!ZIPCD
Me.txtADD1 = recA!ADD1
Me.txtADD2 = recA!ADD2
Me.txtADD3 = recA!ADD3
Me.txtTEL = recA!TEL
Me.txtFAX = recA!FAX
Me.txtMAIL = recA!MAIL
recA.Close
’5)変更モード
Me.txtMODE = "変更"
Me.txtKANJIMEI.SetFocus
Me.txtCUSCD.Enabled = False
Me.cmdDEL.Visible = True
End Sub
Private Sub subCLR()
'クリア
Me.txtCUSCD = Null
Me.txtKANJIMEI = Null
Me.txtKANAMEI = Null
Me.txtZIPCD = Null
Me.txtADD1 = Null
Me.txtADD2 = Null
Me.txtADD3 = Null
Me.txtTEL = Null
Me.txtFAX = Null
Me.txtMAIL = Null
Me.txtMODE = "新規"
Me.txtCUSCD.Enabled = True
Me.txtCUSCD.SetFocus
Me.cmdDEL.Visible = True
End Sub
1)画面最大化と項目クリア
フォームを開いたときは、速やかに最大化します。他の物を隠します。はい。
Call subCLR は、項目入力用のテキストボックスをすべて空にするサブプロシジャです。テキストボックスのクリアといっしょに、「新規」の表示と、「得意先CD」項目のロックの解除、「削除」ボタンの非表示設定をしています。(新規登録のときは、削除処理はないので)
厳密に処理を考えていくと、不要な部分もあるのですが、冗長な書き方をすることで、へんなバグを引き起こさない為のおまじないみたいな物です。もっと複雑な仕掛けを作る時に、この習慣が効果を発揮します。
2)引数確認
DoCmd.OpenForm で、引数が渡されたかどうかをチェックします。引数は、フォームの OpenArgs プロパティにセットされています。引数が無い場合は、OpenArgs は Null です。引数が無い場合は新規登録モードで、画面は 1)の処理で新規登録の状態になっているので、ここで処理終了です。
変更モードの場合は、レコードの内容をセットする処理へ続きます。
3)変更レコード取得
OpenArgs をKEYにして、テーブルからレコードを探します。見つからないことはまず無いのですが、レコードセットを Open したときは必ず EOF を確認するようにします。
4)項目セット
レコードセットの項目をひたすら画面のコントロールへセットしていきます。テーブルの項目名と、コントロールの名前を合わせておくと、コーディングが楽です。
5)変更モード
画面の表示を、「変更」にして、KEY項目の「得意先CD」を変更できないようにします。変更モードでは、レコードの削除も行うので、「削除」ボタンを表示します。
以上で、入力画面の表示処理は完了です。
コメント 0