微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将子表单从调用的表单移至新记录

如何解决将子表单从调用的表单移至新记录

我正在为here描述的问题苦苦挣扎。我想使用从主窗体调用的弹出窗口,将记录添加到表中,更新显示该表中数据的连续子窗体,然后将子窗体移至添加的记录中。

但是,该解决方案无效,并且引发了与here描述的错误相同的错误。下面是此设置的代码

Private Sub Form_Load()
   Set prevForm = Screen.ActiveForm
   
   Me.cbo_EventCat = prevForm!cbo_EventCatSel2
   Me.cbo_EventType = prevForm!cbo_EventTypeSel2
   Me.cbo_SeasonStart = 1
   Me.cbo_SeasonEnd = 1
   Me.cbo_CostType = 1
   Me.txt_MinCost = ""
   Me.txt_MaxCost = ""
   Me.Box_NewComments.Visible = False
   Me.txt_NewComments.Visible = False
   Me.Box_OriginalComments.Visible = False
   Me.txt_OriginalComments.Visible = False
   Me.cbo_ExistingComments_Sel.Visible = False
   Me.Box_NewBuiltComments.Visible = False
   Me.txt_NewBuiltComments.Visible = False
End Sub

Private Sub btn_SubmitAndReturn_Click()
   Dim strsql,strsqlflds,strsqlvals,formName,strSubform As String
   Dim db As DAO.Database
   Dim rs As DAO.Recordset
   Dim recID As Integer
   Dim anyReqFldBlank As Boolean
   
   Set db = CurrentDb
   
   anyReqFldBlank = False
   
   strsqlflds = "INSERT INTO t_EventDetails (fkEventType,fkSeasonStart"
   strsqlvals = "VALUES (" & Me.cbo_EventType & "," & Me.cbo_SeasonStart
   
   If Me.cbo_SeasonStart = 1 Then
      Me.cbo_SeasonStart.BorderColor = RGB(255,0)
      anyReqFldBlank = True
   Else
      Me.cbo_SeasonStart.BorderColor = RGB(0,0)
      anyReqFldBlank = False
   End If
   If Me.cbo_SeasonStart > 2 Then
      If Me.cbo_SeasonEnd = 1 Then
         Me.cbo_SeasonEnd.BorderColor = RGB(255,0)
         anyReqFldBlank = True
      Else
         Me.cbo_SeasonEnd.BorderColor = RGB(0,0)
         anyReqFldBlank = False
         strsqlflds = strsqlflds & ",fkSeasonEnd"
         strsqlvals = strsqlvals & "," & Me.cbo_SeasonEnd
      End If
   End If
   If Me.cbo_CostType = 1 Then
      Me.cbo_CostType.BorderColor = RGB(255,0)
      anyReqFldBlank = True
   Else
      Me.cbo_CostType.BorderColor = RGB(0,0)
      anyReqFldBlank = False
      strsqlflds = strsqlflds & ",fkCostType"
      strsqlvals = strsqlvals & "," & Me.cbo_CostType
      If Me.cbo_CostType = 3 Then
         strsqlflds = strsqlflds & ",MinCost"
         strsqlvals = strsqlvals & "," & Me.txt_MinCost
      ElseIf Me.cbo_CostType = 5 Then
         strsqlflds = strsqlflds & ",MinCost,MaxCost"
         strsqlvals = strsqlvals & "," & Me.txt_MinCost & "," & Me.txt_MaxCost
      Else
      End If
   End If
   If Me.cbo_CommentsSel > 1 Then
      strsqlflds = strsqlflds & ",fkComments"
      strsqlvals = strsqlvals & "," & Me.cbo_CommentsSel
   End If
   If anyReqFldBlank = True Then
      MsgBox ("Fill in required information.")
      Exit Sub
   Else
      strsql = strsql & strsqlflds & ") " & strsqlvals & ");"
      MsgBox ("strsql = " & strsql)
      db.Execute strsql,dbFailOnError
      prevForm!chd_EventDetails2.SetFocus
      prevForm!chd_EventDetails2.Requery
      DoCmd.GoToRecord,acLast
      DoCmd.Close acForm,"f_AddEventInfo",acSaveNo
   End If
End Sub

我也尝试过这些技术,但存在各种问题。

Set rs = db.OpenRecordset("SELECT * FROM t_EventDetails")
rs.MoveLast
DoCmd.GoToRecord,acGoto,rs!fkID

使Access抛出错误,说我无法转到该记录。

DoCmd.GoToRecord,acLast

不执行任何操作,也不引发任何错误

我不知道如何解决这个问题。

解决方法

尝试使用子窗体的 RecordsetClone

Dim frm As Form
Dim rst As DAO.Recordset

Set frm = Forms!MainForm!SubformControlName.Form
frm.Requery

Set rst = frm.RecordsetClone
rst.MoveLast
' Sync form to recordset.
frm.Bookmark = rst.Bookmark
rst.Close

Set rst = Nothing
Set frm = Nothing

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。