首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

用TClientDataSet做假三层,来代替二层好不好,现实不现实?该如何处理

2012-02-28 
用TClientDataSet做假三层,来代替二层好不好,现实不现实??发现批处理的使用方式的确不如直接提交那么好.比

用TClientDataSet做假三层,来代替二层好不好,现实不现实??
发现批处理的使用方式的确不如直接提交那么好.比普通的二层要多很多问题处理.
1.保存数据发生错误时,可能是几条,而不是一条.这样就要在列表中用不同的颜色显示出错的记录及提示出错的信息.
2.如果用户没有UPS,遇到一停电,数据就完了.普通的两层就没有这个缺点.
3.如果用两个TClientDataSet做成一主一从的数据表.使用就更麻烦了.主从表使用这样的批处理,会有更多的问题出现...非常非常麻烦.

但我做这个控件的目的有一个,就是想把数据集读到内存之后,马上断开链接,象ADO.NET一样.呵呵.这样做,二层就可以并发更多的客户端.

看来,只有在AfterPost和AfterDelete后马上ApplyUpdates才好处理.就象普通的二层一样.

其实用这种方式
TAdoConnection-> TDataSetProvider-> TClientDataSet-> TDataSource
代替普通的二层这种方式
TAdoConnection-> TAdoQuery-> TDataSource   ,
现实不现实?各位说一下.

[解决办法]
假的就是假的~~~
好像没什么必要
[解决办法]
你所说的问题三层有二层也有

1) catch update 的问题, 没可能每改一个东东都立即更新 dbms, 这样效率得不到保障
cds 你可以 ApplyUpdates(delta, maxerror), 成 maxerror 来决定出错的数量, 0 就是不许出错, 让客户改正后再提交
双层也是同样的问题, 你不能每条去提交, 数据完整性得不到保证, 嗯...各方面原因啦, 数据库本身就没实时可言

2) applyupdate 后的数据几层跟双层是同样的, 没什么区别, 在编译中的数据没了大家也都一样, 有何区别?

3) 主从表双层是通过大量的反复查询实现的, 最后你会发现 cds 的主从表更理想, 无非是在 DataSetProvider 的 OnUpdateRecord 事件中做控制,
if SourceDS = 主表 then
(Sender as TDataSetProvider).UpdateMode := upWhereChanged
else if SourceDS = 子表
(Sender as TDataSetProvider).UpdateMode := upWhereAll
就是一般的作法了, 还可以进一步细控


正确理解后再决定是否做组件吧..
[解决办法]
一般做三层或用缓存不要“看来,只有在AfterPost和AfterDelete后马上ApplyUpdates才好处理.就象普通的二层一样”这样的三层没有什么意义
如果怕突然掉电,可以采用公文包的技术,这样来电了可以借着停电前的工作继续
[解决办法]
主从可以在服务多设置,组成巢状结构
[解决办法]
我看是你用法问题, 这套体系还是很好的, 楼主应该用一下 BDE, ado 本身的特点就让程序员无法对一些操作细控, 这样反而还觉得是别人的问题了...再回头, 细看 ado, cursor type, lock type 等等就另有体会了

"被删除的记录居然出现在最后一行,而不是原来的地方 " 这样的话本身就有问题, 记录有顺序吗? 要有顺序应该按某一列排序, 这样你总是能出现在原来的地方

Cds 的批更新,批出错方式是可选的, 但是是默认的, 你可以 ApplyUpdate(maxerror) 设为 0 就不是批出错了
[解决办法]
体系问题, bde 我认为是最值得看看的经典 cs, 里面不少先进思想, 并且 bde 兼容性是相当的好, bde 用于 3 层不合适是因为 session 有大限, 32 个, 而 cds 可以完全代替 bde 中所有先进思想, 而不理会连接用的引擎

热点排行