1、加载事件是窗体打开时,新增记录时,没有任何数据,如果是修改数据则会显示要修改的记录(通过Me.OpenArgs参数判断)并且给辅助文本框(me.旧编号)斌值,这个文本框一旦有数据,窗体就会始终处于修改记录的状态,点无数次保存按钮都不会提示错误(记录也不会增加,只会修改)。
2、保存按钮被触发时,也给辅助文本框(me.旧编号)斌值,使窗体由新增记录状态转变成修改状态。避免新增记录时被保存后才发现数据是错的,再修改时由于窗体处于新增状态,而无法保存。这里没有用Me.OpenArgs参数的原因,Me.OpenArgs参数是只读的不能编辑,不好在这个地方给其斌值,还不如用辅助文本框方便和便于理解。所以下面的代码非常重要,有了这样的处理,就可以只用一个窗体实现新增或修改,而不需要一个新增窗体,一个修改窗体共两个窗体。
If IsNull(Me.旧编号) Then '如果旧编号为空,说明新增
rst.AddNew '新增状态
rst![单据编号] = Me.单据编号
Else '否则为修改状态
rst.Edit
End If
Me![旧编号] = Me![单据编号] '这是在新增或修改之间转换的关键
其他要写入到表中的字段..........
If CurrentProject.AllForms("明细账").IsLoaded = True Then Call Form_明细账.查询'这句的意思:如果《明细账》窗体是打开的,就调用这个窗体的查询过程,用来刷新窗体,查询过程不包含操作查询也可以写成:
If CurrentProject.AllForms("明细账").IsLoaded = True Then Form_明细账.明细账子窗体.requery '这样子窗体就可以刷新了
还可以用下面的方法刷新查询窗体的子窗体:
If CurrentProject.AllForms("明细账").IsLoaded = True Then Form_明细账.明细账子窗体.SourceObject = "明细账子窗体"
数据编辑窗体(新增或修改)与查询窗体一般都不是同一个窗体,就看你想用哪种方法,条条大路通罗马,并不是绝对的哪种方法最好,各有各的优缺点。你没有附件,我也无法根据你的情况具体地说明或做一个示例。只能就一般情况而言了。不管用哪种方法刷新,前提被刷新的窗体必须是打开的