关于三层的问题,跟贴有分 ( 积分: 200 )

  • 主题发起人 主题发起人 Afei1
  • 开始时间 开始时间
A

Afei1

Unregistered / Unconfirmed
GUEST, unregistred user!
在下现在用的三层是:
adoconnection---dsp、adoquery---dcomconnection、cds
做了一段时间后,发现了几个问题,请大家不吝赐教:)
1、是不是每个客户端的cds都要对应服务端的的一个dsp?
2、如果是的话,那么对一个比较大的系统,在服务端不是要好几百个dsp?
3、如果真的要那么多dsp的话,是不是可以考虑用多个RDM,要如何实现?
4、关于updatemode的三种模式,从以往的帖子来看,用upwherekeyonly可能会比较好,但用这种的话必须要去更改每个providerflags,这不是偏麻烦了点?也有高手说直接写sql语句进行更新,而不是让dsp去自动处理,这不是更麻烦了(在下偏懒,哈哈)?有没有什么更好的方式?
5、还有就是c/s(adoconnection、adoquery)到我上面说的三层的转变有没有什么比较好、比较快速的方法?
这些先解决了,在另开一个讨论效率方面的帖子
 
在下现在用的三层是:
adoconnection---dsp、adoquery---dcomconnection、cds
做了一段时间后,发现了几个问题,请大家不吝赐教:)
1、是不是每个客户端的cds都要对应服务端的的一个dsp?
2、如果是的话,那么对一个比较大的系统,在服务端不是要好几百个dsp?
3、如果真的要那么多dsp的话,是不是可以考虑用多个RDM,要如何实现?
4、关于updatemode的三种模式,从以往的帖子来看,用upwherekeyonly可能会比较好,但用这种的话必须要去更改每个providerflags,这不是偏麻烦了点?也有高手说直接写sql语句进行更新,而不是让dsp去自动处理,这不是更麻烦了(在下偏懒,哈哈)?有没有什么更好的方式?
5、还有就是c/s(adoconnection、adoquery)到我上面说的三层的转变有没有什么比较好、比较快速的方法?
这些先解决了,在另开一个讨论效率方面的帖子
 
有多少分呀,我跟了
 
多个RDM我做了如下测试,还是有问题,具体请看:
可能说的不是很清楚,我重新说一下:
服务端(Server)有两个RDM,A跟B
A里面有adoconnection、dsp1、qry1
B里面有dsp2,qry2
B引用A,
服务端的两个qry都是连接A的adoconnection。
服务端运行后,在客户端的dcomconnection的ServerName里面就有Server.A和Server.B两个可以选择的servername,如果我选择Server.A,则一切正常,如果选择Server.B,则客户端的数据集在open的时候会报没有connection的错误。请问这是什么问题?
 
to hotboys,
这样小跟一下,当然只能是1分2分了:)
 
有多少分呀,我也跟
 
应该不是每个客户端的cds都要对应服务端的的一个dsp吧
 
to cqq6537
如果两个cds同时连接一个dsp,则会出现乱七八糟的事情,我试过了
 
高手是不是都是晚上才出来啊
 
1、是不是每个客户端的cds都要对应服务端的的一个dsp?
答:不一定,我的经验是:只有固定模块的cds就需要连一个固定的DSP,因为一般我们会把SQL语句写到应用服务器的数据集里,参数传过来。
对应那些临时数据集,就可以多个CDS对应一个DSP,但是有条件限制:
同一个模块的多个数据集不允许连接同一个DSP;
临时数据集必须要用完就关闭、释放,防止冲突。
当然,多个数据模板的方案也可行。
这样说来,如果一个系统很大的话,需要的DSP当然很多了。
不过你会碰到多大的系统呢?是吧。。
2、关于updatemode的三种模式:
不能说是upwherekeyonly可能会比较好,关键要看实际情况的需要,因为“约束条件少了,出错的几率就高了”,自己找平衡点吧,一般来说,还是用upWhereAll吧
至于说直接用SQL语句更新,实现的原理其实很简单,就是在DSP的BeforeUpdateRecord事件中自己处理,然后applied:=true;就可以了,
自己处理数据更新的话,自由一点,主从表更新的时候尤其方便。
而且你可以写一个通用的函数来处理(增、删、改)
 
现在我们有个c/s的系统,有1000多家的用户在用,是机关事业单位的
包括基础信息:单位、部门、人员、
单单人员就有20几个子表
其他的一些业务模块加起来有400多个表
所有说这个系统还算是有点大的了
 
现在就是要把这个c/s改成多层的
现在我比较急切要知道的是,怎么自己增、删、改
如果一个表有7/8十个字段,那增或改的话语句不是要非常长?
我知道在服务端的dsp的beforeupdate有事件可以写
但不知道怎么写啊
请大家帮忙
 
先顶下
回去看看书
 
学习三层中,顶一下!
 
1,2:一个dsp可以多个cds,我一般在取数据前通过调用远程方法将dsp连到我要取得数据源上,然后在客户端通过cds取。这样只要两个cds不同时取数据的话,理论上可以所有cds共用一个dsp。好像没发现有什么问题或者限制。
3:本来就应该按业务逻辑分割成多个rdm来实现,和dsp的多少没关系。
4:对数据的更新,我觉得最好是将要执行的操作以及相关的数据通过调用远程方法传到服务器端,在服务器端根据这些信息组织sql语句操作数据库。比如向用户表中新增一个用户就可以定义一个远程方法 function newuser(userid,username,password:string):boolean;然后你在服务器端组织sql语句去更新数据库不就完了?
5、这个比较麻烦,不知道有没有快速的方法
 
to 迷糊
多个rdm是不是要对应的多个adoconnection,就是一个rdm要放一个adoconnection?
AdoConnection不能共用吗?
 
学习三层中,顶一下
 
各位,如果不是一个cds链接一个dsp,那数据集的一些事件不是要在客户端进行处理?
这是不是违背了三层的初衷?如果硬要放在服务端,那就是要传N多参数了,因为服务端没有对应的dsp可以直接取得数据?
 
三层正开始研究,不算太明白。看了大家的贴子收获不少呀!
 
我也遇到过你那样的问题,后来在这问了,有人说把主要的和常用的表做单独的数据源,在做一个公用的数据源,之后添加一些方法,如切换数据源,打开数据源等,之后在想用到其它的数据就可以调用方法来实现
关注中.............
 
后退
顶部