当前,我使用一个列表框来选择表单提供的要编辑的记录。如果在列表框中没有选择记录怎么办?如何禁用和清空连接到表单数据源的所有控件?
答案 0 :(得分:0)
您必须从表格中取消绑定表格,并使用编码将值放入未绑定的表格控件中。在编程之前,需要进行一些设置。
这需要更多的编程时间,因为您必须在每个控件更新中添加一个更新查询。但是我发现这是最好的选择,因为它可以防止记录损坏,因为它在查看时不会绑定到记录。
打开表单时,所有内容都应为空白,包括列表框。在“更新事件后”列表框中,将其放入代码中以查询数据集并将值放置在表单控件中。
我没有您的表字段的名称,也没有您表单的名称,所以我将使用随机名称。
编码示例:
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
但是,如果不必以空表格开头,我建议对编辑使用子表格(与表格相同的记录源),该子表格无需任何代码即可同步到记录选择表格。