禁用与Ms Access中的表单关联的所有控件

时间:2018-08-27 08:04:00

标签: ms-access

当前,我使用一个列表框来选择表单提供的要编辑的记录。如果在列表框中没有选择记录怎么办?如何禁用和清空连接到表单数据源的所有控件?

2 个答案:

答案 0 :(得分:0)

您必须从表格中取消绑定表格,并使用编码将值放入未绑定的表格控件中。在编程之前,需要进行一些设置。

  1. 确保所有表单控件名称与表字段名称匹配。
  2. 确保表单属性中的记录源为空白。
  3. 使用循环从列表框选择中“插入”查询中的值。

这需要更多的编程时间,因为您必须在每个控件更新中添加一个更新查询。但是我发现这是最好的选择,因为它可以防止记录损坏,因为它在查看时不会绑定到记录。

打开表单时,所有内容都应为空白,包括列表框。在“更新事件后”列表框中,将其放入代码中以查询数据集并将值放置在表单控件中。

我没有您的表字段的名称,也没有您表单的名称,所以我将使用随机名称。

编码示例:

Private sub Listbox1_AfterUpdate()
dim rst as dao.recordset
dim strSQL as string
dim ctr as control

for each ctr in me.controls
    'Identifies if the control is a text box or combo box before trying to enter value in the incorrect control type
    if ctr.controltype = actextbox or ctr.controltype = accombobox
        strsql = "SELECT " & ctr.name & " as [FieldName] " & _
                 "FROM Table1 " & _
                 "WHERE (((Field1) ='" & me.listbox1 & "'));"
        set rst = currentdb.openrecordset(strsql)
        ctr.value = rst![FieldName]
        rst.close
        set rst = nothing
     end if
next ctr

EndCode:
If not rst is nothing then
    rst.close
    set rst = nothing
end if
end sub

如果这对您不起作用,请告诉我,我们可以找出另一种解决方案。

答案 1 :(得分:0)

假设这与您的other question有关,您可以使用Gustav的AfterUpdate -Event,并且要禁用除ListBox之外的所有内容。

Private Sub Form_Load() ' same as ListBox_AfterUpdate, let you start with a new empty record assumin ID > 0
' Set filter.
Me.Filter = "[ID] = " & Nz(Me!NameOfYourListBox.value, 0) & ""
' Activate filter.
Me.FilterOn = True
End Sub

Private Sub Form_Current()
Dim ctl As Variant
Me.AllowAdditions = Me.NewRecord 'only allo new records at start
For Each ctl In Me.Controls
    On Error Resume Next ' ignore errors because control has no enabled proptery
    If ctl.Name <> "NameOfYourListBox" Then
        ctl.Enabled = Not Me.NewRecord
    End If
    If Err.Number <> 438 And Err.Number <> 0 Then
        ' Error other than 438 should be handled
    End If
    On Error GoTo 0 'turn on errors again, if you use an error handler Goto ErrorHandlerName
Next
If Me.NewRecord Then
    Me!ID.ControlSource = ""  'hide the {New} default text on new record
Else
    Me!ID.ControlSource = "ID"
End If
End Sub

但是,如果不必以空表格开头,我建议对编辑使用子表格(与表格相同的记录源),该子表格无需任何代码即可同步到记录选择表格。