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

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



2005/11/08配信
 

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




 

 担当者マスタの作成、2回目です。

 前回は、以下の説明をしました。

 1.担当者マスタの概要
 2.担当者マスタのレイアウト
 3.フォーム名、項目名の作成
 4.form → load
 5.form → Unload
 6.form → KeyDown

 今回は、登録ボタンの解説です。

 では早速、はじめましょう。

-------------------------------------------------------------------

 1.登録ボタンの処理

   登録ボタンを押すことにより、担当者マスタに書き込みを行います

   1-1.btn登録_Click()について   


'◎ポイント解説 1  -----*-----*-----*-----

If inttouroku = 1 Then
If MsgBox("登録しますか", (vbYesNo + vbDefaultButton2 + _
vbInformation), "登録") = vbYes Then
Else
DoCmd.GoToControl "担当者名"
Exit Sub
End If
End If

'◎ポイント解説 2  -----*-----*-----*-----

Select Case syorimode
Case 0 '登録
intRet = 担当者_更新(0)
Case 1 '変更、削除
intRet = 担当者_更新(1)
End Select

p_tancd = Int(0)

From_Clr

'◎ポイント解説 3  -----*-----*-----*-----

[担当者コード].Enabled = True
[担当者コード].Locked = False
[担当者コード].BackColor = 16777215 '白色

[担当者コード].SetFocus

-------------------------------------------------------------------

 では、解説します。

 1-2.◎ポイント解説 1 について

   登録ボタンを押して書き込む前にコンボボックスを表示します。
   再度、確認させます。
   これは、間違ってボタンを押しても回避できるようにするためです。

 1-3.◎ポイント解説 2 について

   ここから、メイン処理です。   

   syorimodeが0の場合は、登録処理をさせます。
                 1の場合は、変更処理をします。

 1-4.◎ポイント解説 3 について

[担当者コード].Enabled = True
[担当者コード].Locked = False
[担当者コード].BackColor = 16777215 '白色


   この処理は担当者コード(テキスト)の入力が出来る状態にします。
   担当者コードを入力して存在すれば、取消ボタンを押さない限り
   入力できないようにしていますのでここで解除しています。

   処理が終わればカーソルを担当者コードにフォーカスをあてます。
   フォーカスをあてるのは、入力できる状態にするという事です。

   登録ボタンを押せば登録処理が終わります。
   次は、また担当者を入力することになります。
   だから、マウスでを担当者コードにわざわざセットしなくて
   済むようにカーソルを自動で移動させてやります。
   それを行うのが、SetFocusです。

-*-------*-------*-------*-------*-------*-------*-------*-------*-

 それでは、intRet = 営業所_更新(0)を解説します。

 Functionを作成する場合は、vba上で”Function 担当者_更新()”を
 入力した後にEnterキーを押します。
 すると、End Functionが勝手に作られます。

Function 担当者_更新()

End Function

 その後、()にupd_mode As Integerを記述します。
 これは、Subも同じです。

 もう少し突っ込んで・・・。

 FunctionとSubの違い、わかりますか?

 Subは、単純に上から下に処理して終了します。
 単純処理です。

 Functionは、()に引数を入れて処理をさせることが出来ます。
 その引数をもとに処理をさせます。

 他には、

 たとえば、Function gamen_chk()の処理を作ったとします。
 登録ボタンの処理の先頭に作り入力画面のチェックをさせます。
 間違えていれば、警告を表示させて再度正しい入力をさせます。
 正しければ、登録処理をします。

 画面上の項目チェックをgamen_chkで行わせるわけです。
 falseなら何も処理せず、エラーメッセージを表示させる。
 trueなら登録処理を行う。

If gamen_chk() then

'ture(真)の処理をさせます。
条件にあっている場合の処理をさせると考えて下さい

else

'false(偽)の処理をさせます。
条件にあってない場合の処理をさせると考えて下さい

End if

 「If syori_A() then」の部分は、「If syori_A() = True then」と
 同じ意味になります。
 省略するとtrueになります。(デフォルト:初期設定)
 省略するのは、嫌いだという几帳面な人は、” = True”を
 入れてください。
 (省略するのが嫌いな私ですが、ここでは省略しています??)

 Functionは処理事態の判断にも使えるのです。
 これを使えば、ソースもすっきりします。
 それに違う場面でも使い回しが出来ます。
 なので、このようにして用いています。


 Function 担当者_更新(upd_mode As Integer)を作成して下さい。

担当者_更新 = True

On Error GoTo 担当者_更新_err

Set cm = New ADODB.Command
Set pm = New ADODB.Parameter

With cm
.ActiveConnection = cn
.CommandType = adCmdStoredProc
If upd_mode = 0 Then

'◎ポイント解説 4  -----*-----*-----*-----

.CommandText = "sp_担当者マスタ_ins"
Else

'◎ポイント解説 5  -----*-----*-----*-----

.CommandText = "sp_担当者マスタ_upd"
End If

'◎ポイント解説 6  -----*-----*-----*-----

Set pm = .CreateParameter(, adInteger, adParamInput, ,
[担当者コード])
.Parameters.Append pm
Set pm = .CreateParameter(, adVarChar, adParamInput, 20,
[担当者名])
.Parameters.Append pm
Set pm = .CreateParameter(, adVarChar, adParamInput, 20,
[カナ名])
.Parameters.Append pm
Set pm = .CreateParameter(, adInteger, adParamInput, ,
[営業所コード])
.Parameters.Append pm

End With

cm.Execute

Set pm = Nothing
Set cm = Nothing

Exit Function

担当者_更新_err:

For Each ado_err In cn.Errors
MsgBox "エラーナンバー " & ado_err.Number & _
vbCrLf & _
"エラーソース " & ado_err.Source & _
vbCrLf & _
Err.Description, vbCritical, "エラー"

Next

担当者_更新 = False

Set pm = Nothing
Set cm = Nothing

-------------------------------------------------------------------

 では、解説です。

 1-5.◎ポイント解説 4 について

  担当者マスタの新規登録の処理となります。

  担当者_更新(upd_mode As Integer)のupd_modeには、0が
     入っています。

   "sp_担当者マスタ_ins"のストアドプロシージャを実行します。

ALTER Procedure sp_担当者マスタ_ins
(
@担当者コード int,
@担当者名 varchar (20),
@カナ名 varchar (20),
@営業所コード int
)
As
insert into 担当者マスタ (担当者コード,担当者名,カナ名,営業所コード)
values (@担当者コード,@担当者名,@カナ名,@営業所コード)
return


   insert into 担当者マスタ (項目1、項目2・・・)
            values (項目a、項目b・・・)

   項目同士が合っていれば、順番はどうでも構いません。
   でも、お互いの項目は合っていないといけません。
   項目1と項目aは同じ、そして項目2と項目bも同じと言うように。


 1-6.◎ポイント解説 5 について

  担当者マスタの変更の処理となります。

  担当者_更新(upd_mode As Integer)のupd_modeには、1が
    入っています。

  "sp_担当者マスタ_upd"のストアドプロシージャを実行します。


ALTER Procedure sp_担当者マスタ_upd
(
@担当者コード int,
@担当者名 varchar (20),
@カナ名 varchar (20),
@営業所コード int
)
As
update 担当者マスタ
set 担当者コード=@担当者コード,担当者名=@担当者名,
カナ名=@カナ名,営業所コード=@営業所コード
where 担当者コード=@担当者コード
return


  ここも項目同士がお互いに合っていれば順番はどうでもよいです。

update 担当者マスタ
set 項目1=項目a,項目2=項目b,・・・

  ポイントは、where 担当者コード=@担当者コードです。
  担当者コードを渡さなければ、書き直しはできませんので
  注意して下さい。


 1-7.◎ポイント解説 6 について

  担当者コードとカナ名で説明します。

  担当者コードについて
  int型はadIntegerになります。数字タイプなのでadParamInput
  の後にある , ,には何も入れません。
  つまり、桁数には何も入れる必要がないのです。

   Set pm = .CreateParameter(, adInteger, adParamInput, , _
                      [担当者コード])
   .Parameters.Append pm

  カナ名について
  varchar型はadVarCharになります。文字タイプなので ,20,が入ります
  (カナ名は20です)

   Set pm = .CreateParameter(, adVarChar, adParamInput, 20, _
                      [カナ名])
   .Parameters.Append pm


  ●ポイント

   adInteger、adVarCharを組み込み定数と言うそうです。
   こんな言葉覚える必要はありません。
   難しく考えず、データを送る場合には頭にadが必要なんだと。
   お約束ごとなんだと思って下さい。

   テーブルの型      組み込み定数

    int             adInteger
    varchar        adVarChar

   これらも、あとあと増えてきますので、その場面で解りやすく
   説明します。

   難しい言葉は、難しい本にまかせて、簡単に覚えましょう。


 次回も、担当者マスタの作成となります。

===================================================================

                ◆ 実践テクニック、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.