Accessの操作
- Home >Excel、Accessの操作や制限 >Accessの操作 >MS-Accessで業務アプリケーションを開発する場合、「ヘッダー」(親フォーム)と「明細」(子フォーム)から構成される伝票形式のようなフォームが多用されると思いますが、dbSheetではAPIを使ってサーバーDBに反映させようとする場合、どのように実装すればいいですか?
Q. MS-Accessで業務アプリケーションを開発する場合、「ヘッダー」(親フォーム)と「明細」(子フォーム)から構成される伝票形式のようなフォームが多用されると思いますが、dbSheetではAPIを使ってサーバーDBに反映させようとする場合、どのように実装すればいいですか?
Answer
サンプル事例
たとえば、ある商品の注文を管理する「注文管理システム」があり、フォームのヘッダー部分がテーブル「注文」、明細部分がテーブル「注文内容」で構成されている場合を考えてみます。
「注文」テーブルは主キーが「注文番号」であり、「注文内容」テーブルの主キーは「注文番号」と「注文内容」から構成されています。
つまり、ヘッダーと明細は「注文番号」で紐づいていることになります。
この場合、「注文」フォームのオープンとともにサーバーDBからローカルテーブル「注文」、「注文内容」にデータがダウンロードされます。
フォーム上の注文レコードに対し、実行ユーザーがヘッダーの一部修正を行い、かつ明細に2商品を追加したとします。
この場合、ヘッダーフォームにある「サーバー更新」ボタンのイベントを利用し、以下のようにVBAで記述します。(エラー処理は省略)
Private Sub btnサーバー更新_Click
Dim blnStatus As Boolean
‘データ変更をローカルテーブルに反映させます。
DoCmd.RunCommand acCmdSaveRecord
‘ヘッダー部分の更新を楽観的ロックによる排他制御で実行します。
blnStatus = dbsCls.CopySvr_fromLocal(“注文”, “Where 注文番号 = ‘” & Me.注文番号& “’, False)
‘成功した場合は、フォームの「注文番号」に紐づく明細「注文内容」の入れ替えを行います。
If blnStatus = True Then
blnStatus = dbsCls.ReplaceSvr_fromLocal(“注文内容”, “Where 注文番号 = ‘” & Me.注文番号 & “’”)
End If
If blnStatus = True Then
MsgBox “サーバー更新を完了しました。”, vbOkOnly + vbInformation, “更新”
Else
MsgBox “更新に失敗しました。”, vbOkOnly + vbExclamation, “更新”
End If
End if
オンラインヘルプの改善にご協力ください。
このページは役に立ちましたか?