MS Access - 关闭窗体没有保存设计更改,acSaveNo不起作用

时间:2012-03-09 16:44:38

标签: forms ms-access

我在MS Access中有一个前端/后端应用程序,当我关闭表单时,我遇到了一些性能问题。

这些表单在关闭之前总是保存,因为在Form_Open我隐藏了一些列并编辑了标题。然后,当我关闭表单时,它会保存隐藏的列并浪费很多时间!

我已经在Access中进行了很多设置修改以优化FE / BE。但是我仍然遇到关闭前保存的表单问题。在保存活动中,它真的浪费了很多时间。使用隐藏/编辑列例程,需要20秒才能保存。没有例程,它需要1秒或更少,但我的数据没有保存。

如何在不需要保存表格的情况下隐藏/编辑这些列?或者如何在不保存结构更改的情况下关闭表单?

不幸的是,Access没有BeforeClose事件,并且在CloseUnload事件中它会在转到此子目录之前保存,因此我无法取消它以便稍后关闭在代码中。

隐藏代码:

'show all columns
For i = 1 To 8
    Form_Y_SubF_LP.Controls("Item_00" & i).ColumnHidden = False
    Form_Y_SubF_LP.Controls("Quantity_00" & i).ColumnHidden = False
    Form_Y_SubF_LP.Controls("DistributionEQ_00" & i).ColumnHidden = False
Next
'Hide unnecessary columns
For i = 8 To ProtQuant + 1 Step -1
    Form_Y_SubF_LP.Controls("Item_00" & i).ColumnHidden = True
    Form_Y_SubF_LP.Controls("Quantity_00" & i).ColumnHidden = True
    Form_Y_SubF_LP.Controls("DistributionEQ_00" & i).ColumnHidden = True
Next

'Change the caption of columns to the real name of each prototype
prot = DLookup("[Prototype]", "Y_Configurações", "[Program]= '" & ProgramName & "'")
For i = 0 To UBound(Split(prot, ";"), 1)
    Form_Y_SubF_LP.Controls("Item_00" & i).Properties("Caption") = "Item_" & Split(prot, ";")(i)
    Form_Y_SubF_LP.Controls("Quantity_00" & i).Properties("Caption") = "Quantity_" & Split(prot, ";")(i)
    Form_Y_SubF_LP.Controls("DistributionEQ_00" & i).Properties("Caption") = "DistributionEQ_" & Split(prot, ";")(i)
Next

1 个答案:

答案 0 :(得分:2)

一个简单的解决方案是在表单的属性表上设置Close Button = No,然后为其On Click事件添加一个命令按钮 cmdCloseMe

Private Sub cmdCloseMe_Click()
    DoCmd.Close acForm, Me.Name, acSaveNo
End Sub

如果您需要在数据表视图中显示您的表单,则需要将其嵌入到另一个表单的子表单控件中,并将 cmdCloseMe 按钮添加到该表单。