担当者マスタの作成、4回目です。
担当者コードの説明となります。
この担当者も問い合わせがあります。
早速、はじめましょう。
-------------------------------------------------------------------
1.担当者コード_DblClickについて
担当者コード上でダブルクリックをした時の処理です。
担当者コード_DblClick を作成してください。
On Error GoTo Err_担当者コード_DblClick
'◎ポイント解説 1 -----*-----*-----*-----
[担当者コード] = Null
If [担当者コード].Enabled = False Then
Exit Sub
End If
'◎ポイント解説 2 -----*-----*-----*-----
form_modoriname = "担当者マスタメンテナンス"
'◎ポイント解説 3 -----*-----*-----*-----
stDocName = "担当者問い合せ"
'◎ポイント解説 4 -----*-----*-----*-----
form_modoricontrols_name_1 = "担当者コード"
'◎ポイント解説 5 -----*-----*-----*-----
form_modoricontrols_name_setfocus = "担当者コード"
'◎ポイント解説 6 -----*-----*-----*-----
Me.Visible = False
'◎ポイント解説 7 -----*-----*-----*-----
DoCmd.OpenForm stDocName
'◎ポイント解説 8 -----*-----*-----*-----
Forms(stDocName)![カナ名].SetFocus
Exit_担当者コード_DblClick:
Exit Sub
Err_担当者コード_DblClick:
MsgBox "エラーナンバー " & Err.Number & _
vbCrLf & _
Err.Description, vbCritical, "エラー"
Resume Exit_担当者コード_DblClick
-------------------------------------------------------------------
では、解説します。
営業所マスタの作成で問い合わせ処理が登場しました。
その復習と思って見てください。
担当者マスタでも問い合わせ処理が登場します。
それも2回、担当者マスタのメンテナンスには営業所コードの項目が
あります。その営業所コード上でも問い合わせ処理が登場します。
それは、次回以降に解説します。
担当者問い合わせ画面と担当者画面の連動部分を説明します。
担当者コード_DblClickとは、担当者コード上でダブルクリック
したアクションとなります。
これはマウスを使ったときを想定して作成しています。
同じ処理をファンクションキーでも使えるように対応させています。
これで、使う人にどっちらでもお好きなようにと言えます。(笑)
1-1.◎ポイント解説 1 について
ファンクションキーを使用した場合
1)担当者コード_KeyDownを作成する。
2)担当者コード_DblClick記述した内容をそのままコピー。
3)◎ポイント解説 1 の部分に下記のif分を追加。
(2、にコードを記述しています)
If KeyCode <> 123 Then
Exit Sub
End If
KeyCodeが123の場合、問い合せ画面へ移動します。
ファンクションキーは”F12”になります。
担当者コード上でF12キーを押すと、問い合せ画面へ移動します。
1-2.◎ポイント解説 2 について
ここでは、戻りフォーム名退避をしています。
form_modorinameに"担当者マスタメンテナンス"を退避。
担当者問い合せ画面に行ったはいいが、戻れない。
(迷子にならないぞ)
1-3.◎ポイント解説 3 について
検索問い合せへ移動するためにフォーム名を保存します。
stDocNameに"担当者問い合せ"を保存。
1-4.◎ポイント解説 4 について
戻りフォーム名退避しています。
担当者問い合せ画面で取得した営業所コードを入れるために
テキスト名を保存しています。
これで担当者マスタメンテナンスの担当者コードに値を入れれば
その内容が画面上に表示されます。
form_modoricontrols_name_1に"担当者コード"を保存。
1-5.◎ポイント解説 5 について
戻りフォームのセットフォーカス名を退避してます。
戻ったけど、フォーカスがどっかにいちゃったではいけません。
form_modoricontrols_name_setfocusに"担当者コード"を保存。
1-6.◎ポイント解説 6 について
担当者マスタメンテナンスを消しています。
担当者問い合せ画面が出ているときに担当者マスタメンテナンス
をさわらせないためにしています。
Me.Visible = False
1-7.◎ポイント解説 7 について
1-3で説明したがstDocNameには"担当者問い合せ"が
入っています。
stDocNameをオープンして担当者問い合せ画面を表示させます。
DoCmd.OpenForm stDocName
1-8.◎ポイント解説 8 について
担当者問い合せ画面のカナ名にセットフォーカスして準備OKです。
カナを入れれば担当者が表示されます。
カナを入力するの?と思ってませんか?
50音(あ〜ん)のボタンを配置してますのでマウスでも
ボタンを押すことにより検索ができます。
Forms(stDocName)![カナ名].SetFocus
解りましたか?
-*-------*-------*-------*-------*-------*-------*-------*-------*-
2.担当者コード_KeyDownについて
担当者コード上でキーを押した時の処理です。
処理は、担当者コード_DblClickと同じです。
On Error GoTo Err_担当者コード_DblClick
If KeyCode <> 123 Then
Exit Sub
End If
[担当者コード] = Null
If [担当者コード].Enabled = False Then
Exit Sub
End If
form_modoriname = "担当者マスタメンテナンス"
stDocName = "担当者問い合せ"
form_modoricontrols_name_1 = "担当者コード"
form_modoricontrols_name_setfocus = "担当者コード"
Me.Visible = False
DoCmd.OpenForm stDocName
Forms(stDocName)![カナ名].SetFocus
Exit_担当者コード_DblClick:
Exit Sub
Err_担当者コード_DblClick:
MsgBox "エラーナンバー " & Err.Number & _
vbCrLf & _
Err.Description, vbCritical, "エラー"
Resume Exit_担当者コード_DblClick
-*-------*-------*-------*-------*-------*-------*-------*-------*-
3.担当者コード_GotFocusについて
担当者コードにフォーカスが入った時の処理です。
From_Clr_btn
If IsNull([担当者コード]) Or Trim([担当者コード]) & "" = "" Then
Else
SendKeys "{ENTER}"
End If
問い合せより戻った場合、担当者コードに何かしら入ってると
SendKeys "{ENTER}"によりENTERキーを押した状態になります。
これで、次の項目に移動します。
-*-------*-------*-------*-------*-------*-------*-------*-------*-
4.担当者コード_LostFocusについて
担当者コードからフォーカスが出て行くときの処理です。
syorimode = 0
If IsNull([担当者コード]) Or Trim([担当者コード]) & "" = "" _
Or [担当者コード] = 0 Then
[担当者コード] = ""
Exit Sub
Else
Me![担当者コード] = Format$(Me![担当者コード], "00")
End If
Set cm = New ADODB.Command
Set rs = New ADODB.Recordset
Set pm = New ADODB.Parameter
pm.Direction = adParamInput
pm.Type = adInteger
pm.Value = [担当者コード]
'◎ポイント解説 9 -----*-----*-----*-----
With cm
.ActiveConnection = cn
.CommandType = adCmdStoredProc
.CommandText = "sp_担当者マスタ_get"
.Parameters.Append pm
End With
Set rs = cm.Execute
If rs.EOF Then
syorimode = 0
[ロックフラグ] = MyCompName
Else
syorimode = 1
[担当者名] = rs![担当者名]
[カナ名] = rs![カナ名]
[営業所コード] = rs![営業所コード]
End If
rs.Close
Set rs = Nothing
Set pm = Nothing
Set cm = Nothing
'◎ポイント解説 10 -----*-----*-----*-----
If syorimode = 1 Then
営業所_読む
End If
[担当者名].Enabled = True
[カナ名].Enabled = True
[営業所コード].Enabled = True
[btn取消].Enabled = True
[btn登録].Enabled = True
[btn取消].Enabled = True
If syorimode = 0 Then
[btn削除].Enabled = False
[btnデータ先頭].Enabled = False
[btnデータ後退].Enabled = False
[btnデータ前進].Enabled = False
[btnデータ最終].Enabled = False
Else
[btn削除].Enabled = True
[btnデータ先頭].Enabled = True
[btnデータ後退].Enabled = True
[btnデータ前進].Enabled = True
[btnデータ最終].Enabled = True
End If
[担当者名].SetFocus
-------------------------------------------------------------------
syorimodeは0:登録、1:変更、削除となります。
4-1.◎ポイント解説 9 について
sp_担当者マスタ_getのストアドプロシージャです。
ALTER Procedure sp_担当者マスタ_get
(
@担当者コード int
)
As
select * from 担当者マスタ
where 担当者コード = @担当者コード
return
-------------------------------------------------------------------
4-2.◎ポイント解説 10 について
syorimode = 1 は、変更、削除モードです。
だから、営業所名を画面に表示させる必要があります。
syorimode = 0 は、登録モードですから表示させることはありません。
Function 営業所_読む()を作成して下さい。
営業所_読む = True
If IsNull(Me![営業所コード]) Or Trim(Me![営業所コード]) & _
"" = "" Then
営業所_読む = False
Exit Function
End If
'営業所マスタ読み込み開始
Set cm_1 = New ADODB.Command
Set rs_1 = New ADODB.Recordset
Set pm_1 = New ADODB.Parameter
pm_1.Direction = adParamInput
pm_1.Type = adInteger
pm_1.Value = [営業所コード]
'◎ポイント解説 11 -----*-----*-----*-----
With cm_1
.ActiveConnection = cn
.CommandType = adCmdStoredProc
.CommandText = "sp_営業所マスタ_get"
.Parameters.Append pm_1
End With
Set rs_1 = cm_1.Execute
If rs_1.EOF Then
[営業所名] = ""
営業所_読む = False
Else
[営業所名] = rs_1![営業所名]
End If
rs_1.Close
Set rs_1 = Nothing
Set pm_1 = Nothing
Set cm_1 = Nothing
4-1.◎ポイント解説 11 について
これは、営業所マスタメンテナンスでも使用したものです。
それが、ここでも使えるわけです。
流用できるのが、多いほどシステムも小さくなりますので
考えて作りましょう。
名前も統一性を持たせて作ることも大切なことです。
1レコード読むものは、”_get”とすれば、何をしているのか
見なくても分かるようになります。
みさなんも分かりやすい名前で統一して下さい。
sp_営業所マスタ_getのストアドプロシージャです。
ALTER Procedure sp_営業所マスタ_get
(
@営業所コード int
)
As
select * from 営業所マスタ
where 営業所コード = @営業所コード
return
次回も、担当者マスタの作成です。
===================================================================
◆
実践テクニック、Accessで作るクラサバシステム ◆
編集・構成:高橋浩
提供・発行:ティウェア
http://www.1tware.com/index.html
Access2000+MSDE2000、Access2002+MSDE2000、Access2003+MSDE2000で
作る販売管理ソフト、クライアントサーバーシステムを構築
※当メールマガジンに掲載された記事を許可なく転載することを禁じます。
===================================================================
実践テクニック、Accessで作るクラサバシステム(隔週 火曜日発行中)
SEが10年以上の開発ノウハウを惜しみなく完全公開!
|