Access(ADP & VBA)とMSDEで作るクライアントサーバーシステム(c/s)

 
実践テクニック、Accessで作るクラサバシステム



2005/12/06配信
 

第6コース  第4回 「担当者マスタの作成」




 

 担当者マスタの作成、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年以上の開発ノウハウを惜しみなく完全公開!

Mail:  (半角英数字)     Powered byまぐまぐ


HOME / お客様の声 / メルマガ / 販売管理ソフト教材 / 会社概要/ 特定商取引法/ お申し込み
 お問い合わせ / メルマガのご意見ご感想 / メルマガのバックナンバー/ プライバシーポリシー
 


 Copyright (c) 2001 ティウェア All rights reserved.