【发布时间】:2017-07-24 18:29:10
【问题描述】:
背景
- Microsoft Access 2010 数据库。
- 子表单控件是一个连续的表单控件。
- 连续表单中的每条记录都有多个控件(组合框、文本框)和一个删除按钮。
- 子表单的基础数据源是一个临时表。
期望的行为
当为子表单上的记录单击删除按钮时,该记录应从显示、临时表和另一个永久表中删除。
注意
临时表是通过使用多个永久表进行查询创建的。通常结构会有所不同,但是这种特殊的解决方案需要规范化和重新创建一个新的宽临时表(类似于 SQL 视图)以处理以一种形式处理所有数据(包含子表单)。
问题
每当单击删除按钮时,子例程的代码都无法正确填充子表单中当前记录的任何控件。
代码
Private Sub btnDelete_Click()
On Error GoTo Err_Handler
Dim Reply As Integer
Reply = MsgBox("Are you sure you want to delete this record?", vbYesNo, "Species Delete")
'do the deletion for temp & underlying tables
If Reply = 6 Then
'delete the record in temp_table
DoCmd.SetWarnings False
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
DoCmd.SetWarnings True
'do for @ Quadrat that has a SpeciesCover record
Dim i As Integer
Dim strControl As String
For i = 1 To QUADRATS_PER_TRANSECT
strControl = "tbxCoverID_Q" & i
'only delete existing records (these should have a Cover ID value)
If Me.Controls(strControl) > 0 Then
Dim sp As New CoverSpecies
With sp
.CoverID = Me.Controls(strControl)
.DeleteCoverRecord
End With
End If
Next
End If
Exit_Handler:
Exit Sub
Err_Handler:
Select Case Err.Number
Case Else
MsgBox "Error #" & Err.Number & ": " & Err.Description, vbCritical, _
"Error encountered (#" & Err.Number & " - btnDelete_Click[Cover form])"
End Select
Resume Exit_Handler
End Sub
症状
代码运行正常,除了子表单当前记录中的控件始终为NULL,因此永远不会识别需要从基础表(不是临时表)中删除的记录的 ID,并且不会删除该记录。
【问题讨论】: