'関数宣言の部分
Dim db, db1, db2 As Database
Dim rs(10) As Variant
Dim date1 as Date
'例えばダイアログボックスを開いて更新する日付を得る - 詳細は解説書参照
' エラートラップをいろいろ設定する必要があります。またフォームのTEXTBOXに日付を入力する方法もあります。
date1=Inputbox("更新する日付を入力してください")
Set db = CurrentDb
'----入金集計Qというクエリーを読みに行く このクエリーは日付毎の集計である事----
rsname="入金集計Q"
Set rs(1) = db.OpenRecordset(rsname, dbOpenSnapshot)
rs(1).Findfirst "日付"=date1
Money1=rs(1)!金額
'----出金集計Qというクエリーを読みに行く このクエリーは日付毎の集計である事----
rsname="出金集計Q"
Set rs(1) = db.OpenRecordset(rsname, dbOpenSnapshot)
rs(1).Findfirst "日付"=date1
Money2=rs(1)!金額
'----残高記録Qというクエリーを読みに行き新しい日付のレコードを追加して計算する
rsname="残高記録Q"
Set rs(1) = db.OpenRecordset(rsname, dbOpenDynaset) '<--- Dynaset(書き換え可能)
'ここの作業はいろいろあります。例えば日付が昇順に必ず並んでいるなら
一番最後のデータを読みに行けば良いことですが、考え方としては議論のあるところです。
rs(1).MoveLast
Money3=rs(1)!金額 <----最後のレコードの金額
Money4 = Money3 + Money1 -Money2 <---新しい残高は更新前の残高+date1の入金-date1の出金
rs(1).AddNew <--- 新しいレコードの追加
rs(1)!日付=date1
rs(1)!金額=Money4
rs(1).Update <--- 更新
備考
これだけのモジュールではエラーチェックなどは不完全です。
例えば2回更新をすると残高がどんどん更新されています。
よってdate1 例2003/6/30 での更新が既に行われたかどうかを
チェックさせる必要があります。
逆に6/29の更新を忘れた場合も一番最後のレコードが6/28であった場合
その残高に6/30のデータを演算させる為6/29のデータが飛ぶ事に
なります。これらのエラーチェックの方法はありますが、まず上記の骨組みについて
理解頂けますか?
レコードセットの読み込みと書き込みに関する部分です。
補足
Laputartさん有難うございます。 入金・出金・残高にそれぞれrecordsetを開き、Money4を計算して残高をupdateしていくわけですね。 これらは毎日のルーチン業務として実施することになりますが、非銀行営業日(例えば土日祝日など)が入った場合にはどう考えればいいのでしょうか? あと、残高はマスターとして常に更新されていくわけですが、例えばトランザクションテーブルに毎日の残高を蓄積させることは必要ないでしょうか? お手数おかけ致しますがよろしくご指導ください。