我想问问有经验的用户,如果你喜欢使用数据感知控件来添加,插入,删除和编辑数据库中的数据,或者你喜欢手动做这件事。
我开发了一些数据库应用程序,在这些应用程序中,为了“用户友好的策略”,我遇到了复杂的表事件网络(插入后,编辑后,之后...以及编辑前、插入前、插入前...)。在那之后,调试应用程序是一项相当繁琐的工作。
意识到这个风险(后来被另一个应用程序),我试图避免这个问题,所以我花了更多的精力写好代码,可读性和综合性。从一开始看起来一切都很好,但当我需要在发送和加载数据之前处理一些预处理的东西时,我又遇到了同样的问题,“缓慢而不可避免”。有时我无论如何也不能使用数据感知控件,开始时看起来很“酷”的DAControl特性在结束时变成了障碍。我“不得不”为非数据感知控件编写特殊的例程,以便表现为数据感知。然后我问自己,我到底为什么要使用数据感知控件?在非数据感知控件上找到应用程序架构是不是更好?当然,这需要更多的时间来编写防bug的代码,但这值得吗?我不知道。
我遇到过几次,就像厄运:天堂在开始,地狱在结束……
我不知道,如果我用错误的方法写数据库程序,如果有一些标准的通用做法该如何进行。还是说这是每个人都会遇到的问题?
感谢您的建议和经验
发布于 2010-03-24 05:49:34
我已经编写了使用数据感知组件的应用程序,而不是TTable样式的组件,以及使用非数据感知组件的应用程序。
现在我更喜欢使用数据感知组件,但使用TClientDataSets而不是TTable样式的组件。
使用TClientDataSet,我不必让用户界面结构模仿数据库结构。
发布于 2010-03-24 05:06:08
秘诀应该在于DataSet参数自动化,您可以创建一个以主从方式将数据集粘合在一起的控件,只需定义它们之间的连接即可。当然,这样的控件应该以其他一些通用的方式提供表单参数。在这种情况下,调用带有实体标识符的表单,所有数据集都将按正确的顺序填写,并允许提供者自动更新数据库中的数据。
通常,最好让DataSets精确地表示具有可选计算字段的表(fkInternalCalc有时工作得更好,因为它通过行更改而不是字段更改进行更新)绑定到数据感知控件。数据感知控制是最优的方法,而且不容易出错。就像在每个方面一样,也有例外。
如果你必须编写太多的glue函数,那么问题可能出在设计模式中,而不是VCL中。
发布于 2010-03-25 18:40:23
很多时候,我使用链接到从查询填充的内存表(kbmMemTable)的数据感知控件。
我看到的好处是:
使用内存中的表非常简单:
dataset.sql.add('select a.field,b.field from a,b');
dataset.open;
inMemoryTable.loadfromdataset(dataset);
inMemoryTable.checkpoint;然后“解析”回数据库,您可以访问每个记录中每个字段的原始数据和新数据(以类似于触发器的方式)-您可以轻松地在毫秒内处理和解析整个编辑-即使最终用户需要30分钟来填充数据感知控件。
https://stackoverflow.com/questions/2499267
复制相似问题