所以我开始因为必要而开始学习访问,因为负责它的人已经过去而且有人不得不继续学习。 我注意到他创建的所有数据库中都存在非常糟糕的(至少是IMO)行为:每个表单都直接绑定到表或保存的查询。这样,如果用户打开表单,他必须完成他应该做的所有步骤,因为如果他关闭表单中间过程(或计算机冻结,或任何类型),实际数据将被泄露因为它将完成一半。这常常破坏了流程链中的所有内容,导致无法执行子顺序步骤,并迫使我直接在表中手动更正数据。
当我开始升级他的东西并开发自己的东西时,我一直在努力学习如何只允许在表单中编辑数据,从而可以随时取消该过程或保存所有更改一次到底。 p>
如果版本很简单,我发现我可以创建一个记录集,将相关数据复制到表单中的未绑定字段,最后,如果用户选择,则将表单字段中的数据复制回记录集
其他时候需要更复杂的解决方案,因为我需要以连续的形式一次编辑几个数据,“保存”它们,运行更多代码,可能添加字段来保存源自该处理的信息等等。然后我学会了使用临时表,但不喜欢它,因为它倾向于膨胀数据库。我甚至在代码执行期间继续创建临时数据库,这些数据库将托管临时表并最终被销毁,但这增加了太多不必要的复杂性。
现在我正在使用断开连接的ADO记录集来保存临时数据和字段。它有效但有其局限性。
所以我想知道,你最好的方式是什么 - 比我更有经验 - 人们会采用这种方式?在内存中使用ADO记录集真的是最好的方法吗?
答案 0 :(得分:0)
我认为你混合了两种表格具有完全不同要求的东西。编辑现有记录(以及绑定表单非常适合)并创建新记录(使用直接绑定表单可能会导致创建不完整的记录)。接近它的方法取决于很多事情,但主要取决于新记录被视为“完整”所需的数据量。
我通常会做以下事情之一:
创建一个未绑定的弹出式模式表单,用于添加仅包含必要字段的新记录。完成后,它会将新记录加载到主窗体中以供进一步编辑。
使用上述方法,但表单不是弹出窗体,而是主窗体的页脚或标题中的一组未绑定字段。
让用户创建新记录,但在表单的OnClose(和/或其他适合您的情况)事件上绑定验证,如果不验证则删除半满记录。
< / LI>让用户以绑定的形式创建新记录,但有一个“清理”例程,可以按计划或基于用户操作调用。
最终,如果您的业务流程需要,每次添加或已修改的新记录时,都会手动添加/修改大多数字段,您最好使用未绑定的形式。
答案 1 :(得分:0)
这样,如果用户打开表单,他必须完成所有步骤 他应该这样做,因为如果他关闭了中间过程的形式(或者 计算机冻结,或任何类型的东西,实际数据将是 妥协,因为它将完成一半
不,如果计算机冻结,则表中没有数据保存。如果您使用断开连接的reocrdset和未绑定的表单,则相同。
如果您在具有某些验证码的表单中使用before update事件并执行简单的cancel = true,则表单数据不会保存,表也不会更新。同样,如果您使用了断开连接的记录集并且用户关闭了表单,您必须测试数据 - 并且您可以再次选择写出数据 - 这种效果与使用绑定表单的区别是零表格或断开连接的表格。
如果版本很简单,我发现我可以创建一个版本 记录集,将相关数据复制到表单中的未绑定字段中 最后,如果用户选择,则从表单字段中复制数据 记录集。
不,你不需要做上述事情。以上几乎没有实现,只能增加额外的开发时间并增加应用程序的成本。在几乎所有情况下,入境表单都会增加开发成本,而不是绑定到表格的简单表单。所以原始开发者有正确的想法。您可以在几乎所有情况下控制基础表的更新,以实现所需的验证。如果开发人员允许,表单仅保存并写出数据。
因此,如果在更新事件之前将验证代码放在表单中,那么在绑定时不会将更多或更少的不完整数据写入表中。如果计算机冻结,半填充的绑定表单或带有解除连接的reocrdset BOTH的半填充未绑定表单将不会写入其数据。
在验证码完成之前,表格中的两种表格都不会将数据写入表格。
Access不是为非绑定表单而设计的,像vb.net,甚至VB6这样的工具都有很多很酷的向导,并且支持非绑定表单。在访问中,我们没有那些向导。当你使用UN-bound表格时,你就会失去大量的表格事件。你实际上得到了两个世界中最糟糕的,因为你失去了对表单事件的使用,没有向导或没有绑定的支持。即使只是我们所拥有的几个删除记录事件也相当惊人。
你失去了使用me.dirty,on-insert,me.newReocrd,更新事件后的表格 - 你丢失和丢失的功能列表是巨大的。如果你想要一个按钮将数据写入表格(例如表格上的保存按钮),那么就去:
If me.Dirty = True then
me.Dirty = False ' this forces your verification code to run
End if
有一些使用案例,其中入境表格将使您受益,但它们将花费您相当多的开发时间。