Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Access 2013)
レコードの更新
投稿日時: 17/07/17 11:26:11
投稿者: アロー

回答よろしくお願いします。
 
製品規格というレコードソースになっているテーブルがあります。
データシートビューのフォーム[規格]があり、フィールド[ID]をダブルクリック時に帳票フォームの[編集]が
開くようになっています。
 
教えて頂きたいのですが、
データシートビューの[規格]画面でデータを変更後に、IDをダブルクリックし帳票フォームの[編集]画面を開くとデータは変更前のデータが表示されます。
データシートビューのフォーム上で変更しただけなのでテーブルのデータは変更されていないからなのですが、
これを帳票フォームの[編集]を開くときに更新されたデータを表示したいと思っています。
 
データシートビューで変更後、別レコードを選択しカレントレコードから外した後にIDをクリックすると変更が適用されるのですが、毎回だと面倒なので上記の方法を教えてもらいたいです。
 
帳票フォーム[編集]から、タブを押して[規格]フォームを表示させるときもあるので、その際にもデータを更新した状態で表示出来るとありがたいです。
 
よろしくお願いします。

回答
投稿日時: 17/07/17 18:19:38
投稿者: hatena
投稿者のウェブサイトに移動

アロー さんの引用:
データシートビューの[規格]画面でデータを変更後に、IDをダブルクリックし帳票フォームの[編集]画面を開くとデータは変更前のデータが表示されます。
データシートビューのフォーム上で変更しただけなのでテーブルのデータは変更されていないからなのですが、
これを帳票フォームの[編集]を開くときに更新されたデータを表示したいと思っています。

 
帳票フォームを開くコードの前に下記のコードを挿入してください。
 
Docmd.RunCommand acCmdSaveRecord

 
上記のコードでレコード保存されますので、その後、開く帳票フォームは更新後のデータになります。
 

投稿日時: 17/07/18 09:21:55
投稿者: アロー

有難うございます。無事出来ました。
 
>帳票フォーム[編集]から、タブを押して[規格]フォームを表示させるときもあるので、その際にもデータを更新>した状態で表示出来るとありがたいです。
 
上記のこれは難しいでしょうか?
或いは帳票フォーム内のIDをクリック時に、データシートビューの[規格]フォームを表示し、任意のIDにカーソルを持ってくるなど出来るのでしょうか?
 
使い方を整理しますと
データシートビュー[規格]のIDをクリックし
Docmd.RunCommand acCmdSaveRecord
で更新された帳票フォーム[編集]を開く。データシートビュー[規格]は閉じていません。
帳票フォーム[編集]から何らかの方法でまたデータシートビューの[規格]を表示(アクティブ?)させる。
その際に帳票フォームでの更新したデータがデータシートビューで更新された状態になってあり、カーソルをそのIDに持ってくる。
という感じなのですが、出来ますでしょうか?
データシートビューはサブフォームになってあり、メインフォームは[規格]、サブフォームは[規格SF]です
 
よろしくお願いします。
 

回答
投稿日時: 17/07/18 10:03:21
投稿者: hatena
投稿者のウェブサイトに移動

アロー さんの引用:
使い方を整理しますと
データシートビュー[規格]のIDをクリックし
Docmd.RunCommand acCmdSaveRecord
で更新された帳票フォーム[編集]を開く。データシートビュー[規格]は閉じていません。
帳票フォーム[編集]から何らかの方法でまたデータシートビューの[規格]を表示(アクティブ?)させる。
その際に帳票フォームでの更新したデータがデータシートビューで更新された状態になってあり、カーソルをそのIDに持ってくる。
という感じなのですが、出来ますでしょうか?
データシートビューはサブフォームになってあり、メインフォームは[規格]、サブフォームは[規格SF]です

自分なり、整理しますね。
 
1. フォームは[規格]が開いており、それにはサブフォーム[規格SF](データシートビュー)が配置されている。
 
2. [規格SF]と[ID]をダブルクリックすると、帳票フォーム[編集]が開く。
 [規格SF]と[編集]のレコードソースは同じ。[規格SF]の更新が反映された状態で[編集]が開く。
 
3. [編集]で編集してから、タブをクリックして[規格]をアクティブにしたときに、
  [編集]での更新が反映されていて、カレントレコードも同じになっている。
 
上記のように理解しましたが、あってますか。
 
あっているなら、まず、[規格SF]と[編集]のカレントレコードの同期については、
2.の[編集]を開く時に、レコードセットを共有するようにすればいいでしょう。
 
Docmd.RunCommand acCmdSaveRecord
Docmd.OpenForm "編集"
Set Forms!編集.Recordset = Me.Recordset
 
これでカレントレコードが同期します。
あと、[編集]フォームの非アクティブ時でレコード保存します。
 
Private Sub Form_Deactivate()
    DoCmd.RunCommand acCmdSaveRecord
End Sub

投稿日時: 17/07/18 14:30:06
投稿者: アロー

有難うございます。
ご理解された内容で全てあっており、教えて頂いた方法で全て上手くいけました。
 
この度はご助力頂き、有難うございました。