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