使用两个组合框同步三个子窗体:能否在rs.FindFirst中用多条件?
主窗体与多子窗体同步记录的最终解决方案
最初尝试通过子窗体的Filter和FilterOn属性实现记录同步,虽然能筛选出ID=1001且Day=2的三条子窗体记录,但主窗体仍停留在ID=1001且Day=1的记录,与组合框选中值不符。当时的VBA代码如下:
Private Sub find_cupnx_AfterUpdate() ' 定位匹配控件值的记录 Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[cupnx] = " & Me![find_cupnx] & "" If Not rs.EOF Then Me.Bookmark = rs.Bookmark End Sub Private Sub find_visit_AfterUpdate() Dim strF As String With Me strF = "[Visit]='" & .find_visit & "'" .F_4100form_s1.Form.Filter = strF .F_4100form_s1.Form.FilterOn = True .F_4100form_s2_Toxicity.Form.Filter = strF .F_4100form_s2_Toxicity.Form.FilterOn = True .F_4100form_s3_Infection.Form.Filter = strF .F_4100form_s3_Infection.Form.FilterOn = True End With End Sub
之后想替换掉Filter属性,改用带多条件的Recordset.Clone和Bookmark方法,思路代码(待修正)如下:
Private Sub find_visit_AfterUpdate() ' 定位匹配控件值的记录 Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[cupnx] = " & Me![find_cupnx] & "" And "[visit] = '" & Me![find_visit] & "'" If Not rs.EOF Then Me.Bookmark = rs.Bookmark End Sub
尝试过Gustav的多同步子窗体示例,但没能理解其中逻辑。最终通过在同一个AfterUpdate()事件中结合Filter/FilterOn属性与Recordset.Clone、Bookmark方法,实现了主窗体与子窗体的正确记录同步,最终代码如下:
Option Compare Database Option Explicit Private Sub find_cupnx_AfterUpdate() ' 定位匹配控件值的记录 Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[cupnx] = " & Me![find_cupnx] & "" If Not rs.EOF Then Me.Bookmark = rs.Bookmark End Sub Private Sub find_visit_AfterUpdate() ' 定位匹配控件值的记录 Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[cupnx] = " & Me![find_cupnx] & " And [visit] = '" & Me![find_visit] & "'" If Not rs.EOF Then Me.Bookmark = rs.Bookmark Dim strF As String With Me strF = "[Visit]='" & .find_visit & "'" .F_4100form_s1.Form.Filter = strF .F_4100form_s1.Form.FilterOn = True .F_4100form_s2_Toxicity.Form.Filter = strF .F_4100form_s2_Toxicity.Form.FilterOn = True .F_4100form_s3_Infection.Form.Filter = strF .F_4100form_s3_Infection.Form.FilterOn = True End With End Sub
内容的提问来源于stack exchange,提问作者ElphiusMostafa
相关产品推荐
相关产品推荐

