返回修改記錄的原始定位

2019-11-06   Access軟體網

本文詳解返回修改記錄的原始定位的實現方法。

主子窗體設計時有一個好的用戶體驗的點是,當我選擇子窗體數據表中的某條記錄並打開了編輯窗體,修改完成後回到主窗體時,則應在子窗體中定位至剛剛修改的那條記錄,關於這方面的內容,本站已經很多了。本文之所以還要談這個問題,主要還是充分站在新手的角度來幫助去理解這個功能的實現,本示例採用的是Access軟體網職場範例中的一個示例加以修改而來,沒有使用平台,一步一步的講解如何實現。
首先,主子窗體進行一個表的數據的增刪改就不必多說了。需要完成本功能的實現,請先按如下的步驟進行,後面會詳解原理。
1)定義一個模塊,並在此模塊中定義一個全局的公共的變量
Public g_CurrentId As String '用來保存所要修改的記錄的主鍵id值
2)在打開編輯窗體的按鈕中OpenForm方法最後將要修改的記錄的id值傳遞給編輯窗體。
Private Sub cmdEdit_Click()
If Not Me.sfrList.Form.CurrentRecord > 0 Then Exit Sub
Me.sfrList.SetFocus
RunCommand acCmdSelectRecord
DoCmd.OpenForm FormName:="frm供應商資料_Edit", _
DataMode:=acFormEdit, wherecondition:="供應商編號=" & Me.sfrList![供應商編號], _
OpenArgs:=Me.sfrList![供應商編號]
'傳遞要修改的記錄的主鍵id值
End Sub
3) 在編輯窗體的Load事件中,得到傳遞過來的值,並賦值給全局變量g_currentId
Private Sub Form_Load()
bSaveFlag = False
'將要修改的主鍵id值保存至全局變量中去
If Not IsNull(Me.OpenArgs) Then
g_CurrentId = Me.OpenArgs
End If
End Sub
4) 在編輯窗體的保存按鈕中設置主窗體中的數據表子窗體的計時器間隔為300毫秒
Forms("FrmOpen").sfrList.Form.TimerInterval = 300
5) 在數據表子窗體的Timer事件中進行判斷,如果g_CurrentId不為空,則調用窗體recordSet對象的findFirst 方法進行查找,該方法的第一個參數是類似where條件的字符串,調用該方法如果找到了那條記錄,它還會幫助我們自動定位到那條記錄,這也是本功能能得以實現的關鍵所在。
Me.Recordset.Findfirst "[供應商編號]=" & g_CurrentId
千萬注意,最後一定要記得將計時器的間隔設為0

最後總結一下, 其實現思路就是:定義公共變量用於保存要修改的記錄的id值,編輯窗體保存數據並關閉後,啟動主窗體中數據表子窗體的Timer事件,之所以能啟動這一事件是因為設置了TimerInterval=300這個屬性的值,最後在Timer事件中調用recordSet對象的findFirst方法進行查找並定位,從而這個功能就得以實現了,具體可以結合示例進行學習。

示例下載:

在「了解更多」里下載。