前回に引き続き名称マスタの作成です。
1.名称マスタの読み込みです。
"sp_名称マスタ_get"の解説です。
画面上の[名称区分コード]からストアドプロシージャの@名称区分コードに
画面上の[名称コード]からストアドプロシージャの@名称コードに
それぞれ値を送ります。
名称マスタに指定したレコードの項目を画面上表示させるためです。
select * (アスタリスク)はすべてと言う意味です
ALTER Procedure sp_名称マスタ_get
(
@名称区分コード smallint,
@名称コード smallint
)
As
select * from 名称マスタ
where (名称区分コード = @名称区分コード)
and (名称コード = @名称コード)
return
-*-------*-------*-------*-------*-------*-------*-------*--
2.削除処理について
btn削除を押すことにより、画面に表示しているデータを削除します。
2-1.btn削除の処理
MsgBoxを入れて本当に削除してもいいのかを確認させます。
誤って押したときのことを考えて。
重要なボタンには付けると大変便利なんですMsgBoxは。
削除が終わったら[名称区分コード]に戻すためにSetFocusを
使用しています。
Private Sub btn削除_Click()
If MsgBox("データを削除しますか。", (vbYesNo + _
vbDefaultButton2 + vbInformation), "削除") = vbYes Then
Else
DoCmd.GoToControl "名称名"
Exit Sub
End If
intRet = 名称_削除()
From_Clr
[名称区分コード].Enabled = True
[名称区分コード].Locked = False
[名称区分コード].BackColor = 16777215 '白色
[名称コード].Enabled = True
[名称コード].Locked = False
[名称コード].BackColor = 16777215 '白色
[名称区分コード].SetFocus
End Sub
-*-------*-------*-------*-------*-------*-------*-------*-------*-
2-1.名称_削除()の処理
名称マスタはキーが2つありますからパラメータの受け渡しが
2つになります。
pm,pm-1で振り分けます。
2-1-1.[名称区分コード]
"大分類"の場合
Set pm = New ADODB.Parameter
pm.Direction = adParamInput
pm.Type = adSmallInt ---- SmallInt型
pm.Value = Int(1) ---- "大分類"は1に
2-1-2.[名称コード]
Set pm_1 = New ADODB.Parameter
pm_1.Direction = adParamInput
pm_1.Type = adSmallInt
pm_1.Value = [名称コード]
With cm
.ActiveConnection = cn
.CommandType = adCmdStoredProc
.CommandText = "sp_名称マスタ_del"
.Parameters.Append pm ----- 名称区分コード用
.Parameters.Append pm_1 ----- 名称コード用
End With
cm.Execute
------ 実行します
キーがいくつ増えようが、pmを増やしていけばよいだけです。
3つなら、pm1,pm2,pm3と作成すればよいのです。
ポイントは、pm_1.Type = adSmallInt の部分です。
2-1-3.文字(キャラクタ)の場合
Set pm = New ADODB.Parameter
pm.Direction = adParamInput
pm.Type = adVarChar ---- VarChar(文字)
pm.Size = 5 ---- 文字数
pm.Value = [コード文字]
ポイントは、pm_1.Type と pm.Size の部分です。
数字型には桁数を指定する必要はありません。
だから、2-1-1、2-1-2にはpm.Sizeがないのです。
あるのは、文字型のみです。
1つの記述はどの本にも載ってますが、2つ以上
文字、数字型の指定は書かれていないものです。
2-1-4.エラーについて
エラーの処理は ado_err.Number が -2147217900
のとき
MsgBox で"このコードは他のデータで使用されているの
で削除できません。", vbCritical, "警告" 警告画面がでます。
その他のエラーで削除できなかった場合はエラーナンバー等を
MsgBoxに表示させます。
Function 名称_削除()
名称_削除 = True
On Error GoTo 名称_削除_err
Set cm = New ADODB.Command
Set pm = New ADODB.Parameter
'区分コードパラメータ
Set pm = New ADODB.Parameter
pm.Direction = adParamInput
pm.Type = adSmallInt
If Me![名称区分コード] = "大分類" Then
pm.Value = Int(1)
Else
If Me![名称区分コード] = "中分類" Then
pm.Value = Int(2)
Else
If Me![名称区分コード] = "納品書見出し" Then
pm.Value = Int(3)
Else
If Me![名称区分コード] = "請求書見出し" Then
pm.Value = Int(4)
Else
If Me![名称区分コード] = "納品書備考" Then
pm.Value = Int(5)
Else
If Me![名称区分コード] = "請求書備考" Then
pm.Value = Int(6)
Else
If Me![名称区分コード] = "回収方法" Then
pm.Value = Int(7)
Else
If Me![名称区分コード] = "単位" Then
pm.Value = Int(8)
Else
End If
End If
End If
End If
End If
End If
End If
End If
'区分コードパラメータ
Set pm_1 = New ADODB.Parameter
pm_1.Direction = adParamInput
pm_1.Type = adSmallInt
pm_1.Value = [名称コード]
With cm
.ActiveConnection = cn
.CommandType = adCmdStoredProc
.CommandText = "sp_名称マスタ_del"
'区分コードパラメータ
.Parameters.Append pm
.Parameters.Append pm_1
End With
cm.Execute
Set pm = Nothing
Set pm_1 = Nothing
Set cm = Nothing
Exit Function
名称_削除_err:
For Each ado_err In cn.Errors
'リレーションの関係
If ado_err.Number = -2147217900 Then
MsgBox "このコードは他のデータで使用されているので _
削除できません。", vbCritical, "警告"
GoTo 名称_削除_err99
Else
MsgBox "エラーナンバー " & ado_err.Number & _
vbCrLf & _
"エラーソース " & ado_err.Source & _
vbCrLf & _
Err.Description, vbCritical, "エラー"
End If
Next
名称_削除_err99:
名称_削除 = False
Set pm = Nothing
Set pm_1 = Nothing
Set cm = Nothing
End Function
-*-------*-------*-------*-------*-------*-------*-------*-------*-
2-1."sp_名称マスタ_del"のストアドプロシージャの記述
削除のポイントは必ずwhereを指定して引数を渡すようにして下さい
whereがないと名称マスタがすべて消えますので注意です。
ALTER Procedure sp_名称マスタ_del
(
@名称区分コード smallint,
@名称コード smallint
)
As
delete 名称マスタ
where (名称区分コード = @名称区分コード)
and (名称コード = @名称コード)
return
今回で名称マスタは終了です。
次回から第5コースに入ります。
===================================================================
◆
実践テクニック、Accessで作るクラサバシステム ◆
かんたんな技術で極めることができます。これがAccessのクラサバシステム
編集・構成:高橋浩
提供・発行:ティウェア
http://www.1tware.com/index.html
Access2000+MSDE2000、Access2002+MSDE2000、Access2003+MSDE2000で
作る販売管理ソフト、クライアントサーバーシステムを構築
※当メールマガジンに掲載された記事を許可なく転載することを禁じます。
===================================================================
実践テクニック、Accessで作るクラサバシステム(隔週 火曜日発行中)
SEが10年以上の開発ノウハウを惜しみなく完全公開!
|