Access 2010循环记录集并更改子表单字段(如果为空)

时间:2013-03-13 22:44:38

标签: vba loops if-statement case recordset

我在主窗体上有一个命令按钮,当单击该按钮时,在子窗体的显示记录上运行一个循环,并更改该字段中所有数据的值,以匹配主窗体上未绑定组合框的值。这样,用户可以选择一次更新子窗体上的多个记录。代码工作正常但如果可以更改为仅更新字段(如果每个记录为空),则会更有用。换句话说,我希望它检查每个记录是否有该字段的空白,然后根据组合框填充它,如果它不为空或空,则跳到下一条记录。 这就是代码现在的样子。我对访问VBA并不是很了解,我不确定是否应该使用“Case”或“If”或者如何将它与下面的代码一起使用。

Private Sub comm_1_Click()
Dim rs As DAO.Recordset

Set rs = Me.Skid1.Form.RecordsetClone
With rs
    .MoveFirst
    Do While Not .EOF
        .Edit
        ![Release Code] = Me.code_updater.Value
         .Update
         .MoveNext
     Loop
 End With
 Set rs = Nothing

End Sub

我试过这个,但它似乎只更新了一些空白记录(非常奇怪),我很确定它接近但不完全。

Private Sub comm_1_Click()
Dim rs As DAO.Recordset
Dim fld As Field

Set rs = Me.Skid1.Form.RecordsetClone
With rs
    .MoveFirst
    Do While Not .EOF
     For Each fld In .Fields

      If IsNull(fld.Value) Then
        .Edit
        ![Release Code] = Me.code_updater.Value
        .Update
         End If
        .MoveNext
          Next

    Loop
End With
Set rs = Nothing

End Sub

2 个答案:

答案 0 :(得分:0)

这有什么不同吗?它检查空白字段以及NULL字段 - 是的,它们是两个不同的东西!

Private Sub comm_1_Click()
Dim rs As DAO.Recordset
Dim fld As Field

Set rs = Me.Skid1.Form.RecordsetClone
With rs
.MoveFirst
Do While Not .EOF
 For Each fld In .Fields

  If (IsNull(fld.Value) Or fld.Value = "")Then
    .Edit
    ![Release Code] = Me.code_updater.Value
    .Update
     End If
    .MoveNext
      Next

Loop
End With
Set rs = Nothing

End Sub

答案 1 :(得分:0)

我怀疑你想要

Private Sub comm_1_Click()
Dim rs As DAO.Recordset
Dim fld As Field

Set rs = Me.Skid1.Form.RecordsetClone
With rs
    .MoveFirst
    Do While Not .EOF
      ''Anything, space filled, null, ZLS
      If Trim(![Release Code] & "") = "" Then
        .Edit
        ![Release Code] = Me.code_updater.Value
        .Update
      End If
      .MoveNext
    Loop
End With
Set rs = Nothing

End Sub

我建议你编辑你的表,并确保它不接受零长度字符串,方法是将文本数据类型的Allow Zero Length属性设置为No。