用接口方式传递clientDataset.data的问题!(30分)

  • 主题发起人 主题发起人 biggo
  • 开始时间 开始时间
B

biggo

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(!][:(!][:(!]
我的三层模式采用Dcom 来做的,
服务器有一接口GetData(sqltext :String;
out Data :Olevariant);
在客户端我直接这么写
GetData('select * from table1', clientDataset1.data);
来接收数据,结果和clientdataset1关联的表格,什么数据都没有
如果我这么写
var
v : Variant;
……
GetData('select * from table1', v);
clientDataset1.data := v
多采用一个变量后,程序就能正常执行获取我想要的数据,怎么回事,
用什么方法可以去掉中间变量v,直接使用clientdataset1.data获取数据。
 
我又实验了下
接口改为function GetData(sqltext:string) : olevariant
那么clientdataset1.data := GetData('select * from table1');
能正常执行,获得我想要的数据
我想问个究竟,为什么我问题中间的方法,就不能正确获取数据?
 
服务器有一接口GetData(sqltext :String;
out Data :Olevariant);
你在服务器一端是怎么给Data赋值的呢?
 
Data := DataSetProvider1.Data
 
具体我也不是很清楚,不过刚刚看到一段话,可能有点道理,说出来讨论一下:
窃以为你的方法是对三层的误用。中间层的作用不是简单地将客户端以SQL语句表示的数据请求发送到数据库,再将数据库的结果简单地转发至客户端的简单的数据传递工作。这种结构只会大大降低系统的性能(慢数倍)——软件的层数增加了,数据打包解包的次数多了,而这个额外增加的层并没有做什么实际的工作。
多层方法中的中间层的主要目的是完成业务规则,而不是简单的数据传递。客户端和中间层之间的交互通常应是业务方法调用,而不是把与业务逻辑相关的SQL语句发给中间层。是中间层定义了业务规则(可以简单地理解成对数据库的操作),而不是客户端定义业务规则。把SQL语句从客户端发到中间层,这样的业务规则其实是在客户端实现的。这种情况下的多层,唯一的好处可能就只是客户端不需要安装数据库厂商的驱动程序了,呵呵。
 
我想是串參數而已,中間層如何知道sql?根據client的參數動態生成。。。
然後是一系列符合業務規則的檢查。。
包括異常的處理
然後把數據傳回去
小弟最近在這個東東,換印討論
 
后退
顶部