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

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



2005/05/10配信
 

第4コース  第13回 「名称マスタの作成」




 

 前回に引き続き名称マスタの作成です。

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年以上の開発ノウハウを惜しみなく完全公開!

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


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


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