所以我对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
答案 0 :(得分:0)
在比较期间,空值可能会导致奇怪的结果。尝试以下内容:
If RstRecSet("GroupName").Value & "" <> txtGroupNameEdit.Value & "" Or ...
答案 1 :(得分:0)
但是你的保存按钮只需要这一行代码:
如果me.dirty那么me.dirty = false
为什么需要所有其他代码和检查?在访问表单中编辑数据时,数据不会更改或提交到表中,直到您允许保存数据。更重要的是,如果控件未更改,则该控件的事件代码不会运行。因此,实际上你不需要编写大量代码是一个巨大的浪费时间。
您当然可以(并且应该)在更新事件之前放置额外的代码来检查表单中的值和日期。此事件发生在将表单中的数据写入表之前,因此您可以添加代码来测试空文本框,或者在将数据写回表之前具有非常复杂的代码和规则来测试数据。
你在这里重新发明了轮子,浪费了宝贵的开发时间。保存按钮只需要上面一行代码来保存数据。
为了防止发生保存,您可以在更新事件之前在表单中放置测试和验证代码,如果用户不编辑任何数据,则不会触发该事件。也许您解释数据问题的验证是什么。保存按钮不是必需的,请记住ctrl-s,ctrl-f4和其他很多键都会保存数据,但在所有情况下,更新事件之前的测试代码都会运行并触发。