VBA:根据当前数据更新记录集

时间:2014-10-31 13:51:58

标签: vba ms-access access-vba

所以我对vba访问有点新意,只是遇到了代码的巨大问题。让我解释一下,我有一个表单,从当前记录加载数据,并允许用户编辑它。目前我正在创建保存按钮,以便在数据库中正确更新已更改的数据。我所拥有的是检查以确保文本框中的数据等于记录集中的数据。问题是如果数据库中的数据为空,它将运行,就好像它等于文本框中的数据一样,即使文本框中有“更新组”。对我而言,这有点疏忽,有点令人失望。我的问题是,是否有人知道这个问题的解决方法?

提前感谢任何信息。

在这里答案:如果是RstRecSet(“GroupName”)。值& “”<> txtGroupNameEdit.Value & “” -Wayne

这是我的代码:

    Dim searchGroup As String
Dim db As DAO.Database
Dim RstRecSet As DAO.Recordset
Dim Rst As DAO.Recordset
Set db = CurrentDb
searchGroup = txtGroupNrEdit
Set RstRecSet = db.OpenRecordset("Select * from tblGroupHeader Where groupNum like '*" & searchGroup & "*';", dbOpenDynaset)
Set Rst = db.OpenRecordset("Select * from tblAuditTable;", dbOpenDynaset)

If RstRecSet("GroupName").Value <> txtGroupNameEdit.Value Or RstRecSet("PlanStartDate").Value <> txtStartDateEdit.Value _
Or RstRecSet("CanDate").Value <> txtCanDateEdit.Value Or RstRecSet("ClerkID").Value <> txtClerkIDEdit.Value _
Or RstRecSet("PopulationType").Value <> txtGroupTypeEdit.Value Or RstRecSet("COC").Value <> chkCOCEdit.Value _
Or RstRecSet("CDHFinancialPartner").Value <> cmbCDHEdit.Value Or RstRecSet("CDHProdOptions").Value <> chkCDHEdit.Value _
Or RstRecSet("MemberLevelBenefits").Value <> chkMembBeneEdit.Value Or RstRecSet("Comments").Value <> txtCommentsEdit.Value _
Or RstRecSet("AlsoKnownAs").Value <> txtKnownEdit.Value Or RstRecSet("BCBS").Value <> chkBCBSEdit.Value _
Or RstRecSet("Other").Value <> chkOtherEdit.Value Then
    RstRecSet.Edit
    Rst.AddNew
        If RstRecSet("AlsoKnownAs").Value <> txtKnownEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("AlsoKnownAs").Value = txtKnownEdit.Value
        Rst("AlsoKnownAs").Value = RstRecSet("AlsoKnownAs")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("PlanStartDate").Value <> txtStartDateEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("PlanStartDate").Value = txtStartDateEdit.Value
        Rst("PlanStartDate").Value = RstRecSet("PlanStartDate")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("CanDate").Value <> txtCanDateEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("CanDate").Value = txtCanDateEdit.Value
        Rst("CanDate").Value = RstRecSet("CanDate")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("PopulationType").Value <> txtGroupTypeEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("PopulationType").Value = txtGroupTypeEdit.Value
        Rst("PopulationType").Value = RstRecSet("PopulationType")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("CDHFinancialPartner").Value <> cmbCDHEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("CDHFinancialPartner").Value = cmbCDHEdit.Value
        Rst("CDHFinancialPartner").Value = RstRecSet("CDHFinancialPartner")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("MemberLevelBenefits").Value <> chkMembBeneEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("MemberLevelBenefits").Value = chkMembBeneEdit.Value
        Rst("MemberLevelBenefits").Value = RstRecSet("MemberLevelBenefits")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("Other").Value <> chkOtherEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("Other").Value = chkOtherEdit.Value
        Rst("Other").Value = RstRecSet("Other")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("ClerkID").Value <> txtClerkIDEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("ClerkID").Value = txtClerkIDEdit.Value
        Rst("ClerkID").Value = RstRecSet("ClerkID")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("COC").Value <> chkCOCEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("COC").Value = chkCOCEdit.Value
        Rst("COC").Value = RstRecSet("COC")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("CDHProdOptions").Value <> chkCDHEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("CDHProdOptions").Value = chkCDHEdit.Value
        Rst("CDHProdOptions").Value = RstRecSet("CDHProdOptions")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("Comments").Value <> txtCommentsEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("Comments").Value = txtCommentsEdit.Value
        Rst("SpecialConsideration").Value = RstRecSet("Comments")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("BCBS").Value <> chkBCBSEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("BCBS").Value = chkBCBSEdit.Value
        Rst("BCBS").Value = RstRecSet("BCBS")
        Rst("DateChanged").Value = Date
        End If
        If RstRecSet("GroupName").Value <> txtGroupNameEdit.Value Then
        Rst("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupNum").Value = txtGroupNrEdit.Value
        RstRecSet("GroupName").Value = txtGroupNameEdit.Value
        Rst("GroupName").Value = RstRecSet("GroupName")
        Rst("DateChanged").Value = Date
        End If
    Rst.Update
    RstRecSet.Update
End If

2 个答案:

答案 0 :(得分:0)

在比较期间,空值可能会导致奇怪的结果。尝试以下内容:

If RstRecSet("GroupName").Value & "" <> txtGroupNameEdit.Value & "" Or ...

答案 1 :(得分:0)

但是你的保存按钮只需要这一行代码:

如果me.dirty那么me.dirty = false

为什么需要所有其他代码和检查?在访问表单中编辑数据时,数据不会更改或提交到表中,直到您允许保存数据。更重要的是,如果控件未更改,则该控件的事件代码不会运行。因此,实际上你不需要编写大量代码是一个巨大的浪费时间。

您当然可以(并且应该)在更新事件之前放置额外的代码来检查表单中的值和日期。此事件发生在将表单中的数据写入表之前,因此您可以添加代码来测试空文本框,或者在将数据写回表之前具有非常复杂的代码和规则来测试数据。

你在这里重新发明了轮子,浪费了宝贵的开发时间。保存按钮只需要上面一行代码来保存数据。

为了防止发生保存,您可以在更新事件之前在表单中放置测试和验证代码,如果用户不编辑任何数据,则不会触发该事件。也许您解释数据问题的验证是什么。保存按钮不是必需的,请记住ctrl-s,ctrl-f4和其他很多键都会保存数据,但在所有情况下,更新事件之前的测试代码都会运行并触发。