Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


135 / 2272 ツリー ←次へ | 前へ→

【12887】更新ログ付加のやり方 素人 15/9/30(水) 13:43 質問[未読]
【12888】Re:更新ログ付加のやり方 かるびの 15/10/1(木) 0:54 回答[未読]
【12889】Re:更新ログ付加のやり方 素人 15/10/1(木) 9:49 お礼[未読]

【12887】更新ログ付加のやり方
質問  素人  - 15/9/30(水) 13:43 -

引用なし
パスワード
   上手く伝えられないかもしれませんが、宜しくお願いします。

更新後、更新ログ(登録者・日付・時間)の付加をしたく下記の記述をしましたが、最初に新規登録まは修正したレコードのみしか更新ログが反映されず困っています。
複数のレコード各々に更新ログを付けたい場合、どのようにすればいいのでしょうか?

使用ソフト:Access2010
OS:Win7 Pro SP1


Private Sub Form_AfterUpdate()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset


'接続
Set cn = CurrentProject.Connection

'レコードセット
Set rs = New ADODB.Recordset
rs.Open "Data_estimated_amount", cn, adOpenKeyset, adLockOptimistic


'更新

    
    rs!日付 = Date
    rs!時間 = Time
    rs!登録者 = Me.登録者
    rs.Update
    

    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

End Sub

【12888】Re:更新ログ付加のやり方
回答  かるびの  - 15/10/1(木) 0:54 -

引用なし
パスワード
   >rs.Open "Data_estimated_amount", cn, adOpenKeyset, adLockOptimistic

 ADOは、使ったことがないので、よくわからないのですが、
このコードは、「Data_estimated_amount」テーブルのレコードセットを開くというコードですよね。

 レコードセットを開くと、レコードが1レコード以上あるならば、
先頭レコードがカレントレコードになります。
 カレントレコードになるということは、そのレコードのみデータの読み書きができるということです。
 

>rs!日付 = Date
>rs!時間 = Time
>rs!登録者 = Me.登録者

 これらのコードは、カレントレコードの各フィールドの値を書き替えています。
 レコードセットを開いてから、レコードの移動を行っていないので、
結局、先頭レコードの値が書き替えられます。


 つまり、このプロシージャを何度実行しようとも、先頭レコードの値をその都度上書きしているだけ
という状況です。


 更新ログをつけるためには、
その都度、「Data_estimated_amount」テーブルに新規レコードを追加して、
当該新規レコードにおける各フィールドの値を書き替える
という操作をする必要があります。

 DAOであれば、
>rs!日付 = Date
のコードの前に、
   rs.AddNew
を実行すれば、レコードセットに新規レコードが追加され、それがカレントレコードになるので、
>rs!日付 = Date
により、新規レコードの日付フィールドにDate関数の返り値が格納されます。

 なお、「rs.Update」を実行しないと、折角「rs!日付 = Date」で書き替えても、テーブルに保存されません。

 ADOの場合も、AddNewメソッドとか、Updateメソッドで良かったように思いますが、
いかんせん、ADOは使ったことがないので、はっきりしたことはわかりません。
 悪しからず。

【12889】Re:更新ログ付加のやり方
お礼  素人  - 15/10/1(木) 9:49 -

引用なし
パスワード
   ▼かるびの様

早速ご回答頂き、ありがとうございました。

フォーム内のレコードソースとして既に「Data_estimated_amount」というテーブルを読込ませて、新規レコード追加と既存のレコードの修正時に対する更新ログを付けたいと思いやってみました。

> ADOは、使ったことがないので、よくわからないのですが、
>このコードは、「Data_estimated_amount」テーブルのレコードセットを開くというコードですよね。

はい、そうです。


> レコードセットを開くと、レコードが1レコード以上あるならば、
>先頭レコードがカレントレコードになります。
> カレントレコードになるということは、そのレコードのみデータの読み書きができるということです。


実際この様な結果になったので薄々は分かってましたが、やっぱりそうなんですね。確信出来ました。

新規追加だけなら何とか出来そうですが、修正時の対応はもう少し考えてみます。

お忙しい中、時間を割いて頂きありがとうございました。

135 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078188
(SS)C-BOARD v3.8 is Free