Ms access 如何使用VBA仅更新access数据表中当前行上的控件

Ms access 如何使用VBA仅更新access数据表中当前行上的控件,ms-access,combobox,vba,datasheet,Ms Access,Combobox,Vba,Datasheet,下图中的数据表子窗体在每个单元格中都有一个组合框。如果在左侧的一个单元格中选择新值,则右侧的单元格需要重新查询并设置为null(因为右侧的组合框由左侧的组合框过滤)。如果数据表中只有一行,则我的代码运行良好。但是,如果有多个组合框,我的代码会在所有行中将所有组合框重置为右侧(这是错误的)。我需要在我的代码(下面进一步列出)中更改什么,以便只重置与所选组合框相同行上的字段 下面是第一个组合框上的VBA: Private Sub cbo_LOA_Segment1_AfterUpdate() ' r

下图中的数据表子窗体在每个单元格中都有一个组合框。如果在左侧的一个单元格中选择新值,则右侧的单元格需要重新查询并设置为null(因为右侧的组合框由左侧的组合框过滤)。如果数据表中只有一行,则我的代码运行良好。但是,如果有多个组合框,我的代码会在所有行中将所有组合框重置为右侧(这是错误的)。我需要在我的代码(下面进一步列出)中更改什么,以便只重置与所选组合框相同行上的字段

下面是第一个组合框上的VBA:

Private Sub cbo_LOA_Segment1_AfterUpdate()
' requery all subsequent LOA combo boxes to
' show only LOAs matching the selected Agency AND that match the earlier LOA entries
    With Me
        !cbo_LOA_Segment2 = Null
        !cbo_LOA_Segment2.Requery
        !cbo_LOA_Segment3 = Null
        !cbo_LOA_Segment3.Requery
        !cbo_LOA_Segment4 = Null
        !cbo_LOA_Segment4.Requery
        !cbo_LOA_Segment5 = Null
        !cbo_LOA_Segment5.Requery
        !cbo_LOA_Segment6 = Null
        !cbo_LOA_Segment6.Requery
        !cbo_LOA_Segment7 = Null
        !cbo_LOA_Segment7.Requery
        !cbo_LOA_Segment8 = Null
        !cbo_LOA_Segment8.Requery
        !cbo_LOA_Segment9 = Null
        !cbo_LOA_Segment9.Requery
        !cbo_LOA_Segment10 = Null
    End With


End Sub

数据表视图类似于连续表单,因为控件实际上只存在一次。因此,正如您所注意到的,对于多条记录,一旦组合框的内容发生更改,这将影响每条记录

唯一的解决方法是一次只显示一条记录。这可能不适用于您的应用程序,具体取决于您有多少记录以及您的编辑过程。同样,如果您只编辑使用唯一键可以找到的特定记录,这可能非常实用,因为您可以快速过滤数据


您可以使用上面Nathan的建议,尽管这需要转换您的数据(一个主要的危害)或大量代码,以便首先将表读入数组,将该数组写到屏幕上,然后(向后操作)使用每个记录一次调用来更新表。不是很有效,但可行。

这会发生,因为控件是相同的,只是每个控件的数据不同。在过去,我使用了多行文本框,模仿一个子表单,然后使用LOA_Segment2_Row1…..5等。实现我的方法并不难,一旦你知道你想要水平显示什么,即字段和要显示多少,你可以通过RST控制它,与子表单相同,您可以有多个子窗体,并控制这些子窗体。我同意,一旦数据/布局完成,这将是最后一步,否则你就会开始追尾:)嗯。。。不过,两者似乎都有点笨重。像ActiveDatasheet这样的东西能帮上忙吗?