DataWindow中批处理的疑惑?

LWWANDVB 2013-02-18 11:52:13
  之前提过这个问题,为了更深入讨论,特开此贴。
我因惯用DELPHI的非批处理数据集,记录编辑完一提交,数据库后台的唯一约束(索引)检查马上就会起到作用。记录删除一执行,数据库后台的维护表与表关系线的触发器也会马上执行。
  当记录违反上述数据库设置规则时,直接在前台显示错误信息就OK。

  但在PB中是批处理方式,情况会变复杂,用户在编辑记录删除记录操作时,内容很可能是违反了数据库后台的这些规则,但只有Update后才知道。那么我只好:
方法一:Update前写代码提示用户某些记录违反规则。
方法二:Update后发现错误,回滚事务并把记录恢复,显示错误记录,告之用户要错误所在。
方法三:当编辑完记录或删除记录时马上Update。

使用方法一、二都会增加系统的复杂度,后台设的规则,前台也要重复设定,
使用方法三又会失去批处理的特点,不利于用户输入数据象电子表格自由的方式。

不知道大家如何处理这类问题?
...全文
947 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
做梦的猫 2013-02-19
  • 打赏
  • 举报
回复
恕我直言,我认为“建议程序员不使用后台提供的功能,而是写代码把表包装起来使用,约束就跑到代码里面即可”这个说法有些过了!如果完全放弃数据库提供的逻辑约束功能,而仅仅把它当作一个容器的话,固然符合“约束尽可能集中”的原则和数据库移植的便利性,但却要付出软件复杂度极大提升,可靠性极大降低的代价,绝对是得不偿失的! 所以,方法1并不应视为一种约束,而是在数据库已保证约束前提下的一种对用户友好性的加强,代码约束和数据库约束的可靠性是不在一个数量级的。总而言之,任何原则和规范都不应机械地执行,因为事物总是不停地从简单向复杂不断进化,永远没有一劳永逸的解决方案。
LWWANDVB 2013-02-19
  • 打赏
  • 举报
回复
回楼上,什么叫多客户端并发?多表更新?可否举例说明一下?
zlf19810306 2013-02-19
  • 打赏
  • 举报
回复
方法三的确是最简单有效的做法。 如果考虑到数据库多客户端并发,多表更新,方法三就最容易出问题
A啦Dbit 2013-02-18
  • 打赏
  • 举报
回复
用户应该只需要知道为什么保存不上应该就可以了 太复杂了,真是为难了程序员
LWWANDVB 2013-02-18
  • 打赏
  • 举报
回复
>>但我也学过一下ADO.NET,发现ADO.NET偏向方法二的做法。
LWWANDVB 2013-02-18
  • 打赏
  • 举报
回复
上面更正一下: >>方法二不需要多做代码去检查约束问题。 >>也分析了一下,方法三的确是最简单有效的做法。
LWWANDVB 2013-02-18
  • 打赏
  • 举报
回复
楼上的意见很有道理。 顺便更正一下,应该是: 方法一才需要在前台去检查约束的问题,那么前后台都存在着重复的约束检查。 方法三不需要多做代码去检查约束问题。 也分析了一下,方法二的确是最简单有效的做法。 但我也学过一下ADO.NET,发现ADO.NET偏向方法三的做法。当Update失败后,出错的记录有个"X"号,删除出错的记录会回到主缓冲区的末尾。 我理解过一些什么面向对象数据库设计,它建议程序员不使用后台提供的功能,而是写代码把表包装起来使用,约束就跑到代码里面即可。这样的话,约束检查也只需要定义一次即可。
做梦的猫 2013-02-18
  • 打赏
  • 举报
回复
我也认为约束只应写一次(而且应尽可能集中),这是保证代码可维护性的基本原则。 所以在数据库通过唯一索引保证约束的情况下,数据的正确性已不成问题,要考虑的便只是为提高用户友好度应付出多少代价的问题。所以,一般情况下方法三肯定是首选。但如果用户不能接受或程序员对自己的代码要求完美的话,就应该用方法1。我不建议采用方法2,因为这是开发成本最高的方法,而更为关键的是这种方法让所有错误集中到最后才爆发,用户肯定会晕倒的!
LWWANDVB 2013-02-18
  • 打赏
  • 举报
回复
回楼上,我觉得细节的问题应该要处理好。

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧