我有一个“联系人”表格。这有一个带有子表单的选项卡控件。其中一页有一个连续的要求子表格。这 12 种需求类型中有 9 种具有相应的标签页和子表单。我使用公共功能来检查页面的可见性,以便确保唯一可见的页面是已设置为具有要求的页面。
我需要能够控制的其他事情如下:
如果有人删除了某个需求,我必须检查该需求联系人 - 需求详细信息表中的任何详细记录。用户可以添加联系人要求。这将显示该标签页和子表单,但用户可能永远不会填写该要求的任何详细信息。因此,代码会在该要求中查找子记录。如果有,则警告用户并要求确认他们要删除详细记录。如果是,则将其删除,然后删除联系需求记录本身。如果没有详细记录,则该联系需求记录将被删除。
如果有人要添加新需求,在添加新记录之前,我需要检查此联系人记录是否没有相同需求类型的联系人需求记录。如果是这样,告诉他们他们不能这样做,然后退出。
所以这里是用于检查页面可见性的代码,基于联系人需求表中的需求类型,用于当前联系人。为清楚起见,我在 tblReqType 表中添加了列。它有 ID 和 txtRequirementType。它还有txtRequirementPage 和txtRequirementTable,如果需求类型有相应的页和表要识别,它们有页和源表的名称。
Public Function ShowReqs(MCID As Integer)
Dim db As DAO.Database
Dim ReqPages As String
Dim ShowReqPages As DAO.Recordset
Dim IsReq As Integer
Dim showpg As Variant
Dim reqrec As Integer
Dim ctl As Control
If Forms!frmMContacts.Detail.Visible = True Then
Forms!frmMContacts.frmMContacts_SubRequirements.Form.Dirty = False
Set db = CurrentDb
ReqPages = "SELECT tblReqType.ID, tblReqType.txtRequirementPage, tblReqType.txtRequirementTable " & _
"FROM tblReqType " & _
"WHERE tblReqType.txtRequirementPage is not null;"
Set ShowReqPages = db.OpenRecordset(ReqPages, dbOpenDynaset, dbSeeChanges)
Forms!frmMContacts.Painting = False
Do While Not ShowReqPages.EOF
IsReq = DCount("*", "tblMContactRequirements", "FKMC = " & Nz(Forms!frmMContacts.ID, 0) & " and FKRequirementType = " & ShowReqPages.Fields("ID"))
If IsReq = 0 Then
showpg = False
Else
showpg = True
End If
Forms!frmMContacts.tbMContactsubs.Pages(ShowReqPages.Fields("txtRequirementPage")).Visible = showpg
For Each ctl In Forms!frmMContacts.tbMContactsubs.Pages(ShowReqPages.Fields("txtRequirementPage")).Controls
With ctl
Select Case .ControlType
Case acSubform
ctl.Form.Requery
End Select
End With
Next ctl
ShowReqPages.MoveNext
Loop
Forms!frmMContacts.Painting = True
Forms!frmMContacts.Repaint
Set db = Nothing
Set ShowReqPages = Nothing
End If
End Function
这似乎可行,但是当我试图为相同的联系人 ID 添加重复的需求类型时,它会妨碍我。我需要在它通过 SQL 中的表之前抓住它。这是因为我在 tblMContactRequirements 表上为 FKMC(联系人 ID)和 FKRequirementType 列放置了一个索引,以使这两个列在一起是唯一的。它会抛出一个关于索引的讨厌的 odbc 消息,我想提前,检查潜在的重复,如果它会使索引错误发生重复/跳闸,则将其退出。
在子需求表单中,我将以下内容放入 Before_Update,然后放入 Before_Insert。无论哪种方式,我都会遇到奇怪的问题。很难指出它们,因为我不知道是什么导致了发生的事情。我解决了一件事情,然后又出现了另一个问题。
这是代码,旨在捕捉骗子:
Private Sub Form_BeforeInsert(Cancel As Integer)
Dim rst As DAO.Recordset
Dim reqrec As Integer
DoCmd.SetWarnings True
Set rst = Me.RecordsetClone
rst.FindFirst "[FKRequirementType] = " & Me.FKRequirementType & " AND [FKMC] = " & Me.Parent!ID
If Not rst.NoMatch Then
MsgBox "This requirement has already been added! ", vbOKOnly, "Requirements Shouldn't be Added Twice."
Me.Undo
BeforeResult = 1
Else
BeforeResult = 0
End If
rst.Close
Me.Dirty = False
我尝试将其放入更改的需求类型组合控件中:
Private Sub FKRequirementType_Change()
Form_BeforeInsert (0)
If BeforeResult = 1 Then
Exit Sub
Else
Form_AfterUpdate
End If
End Sub
我尝试将其放入表单更新后:
Private Sub Form_AfterUpdate()
Dim FKMC As Integer
FKMC = Nz(Me.Parent!ID, 0)
Call ShowReqs(FKMC)
End Sub
我不知道我是否过度编码,把东西放在错误的地方,或者什么。
如果有人能帮我解决这个问题,我会很感激另一双眼睛!