一个很菜的关于三层的问题,请大富翁们帮帮忙!(100分)

  • 主题发起人 主题发起人 Fairys
  • 开始时间 开始时间
F

Fairys

Unregistered / Unconfirmed
GUEST, unregistred user!
我的服务器端已经做好,在RemoteDataModule中用一个SQLConnection进行
数据库端的连接,一个SQLQuery负责SQL语句的执行,一个DataSetProvider负责
与客端的通信。
第一种做法:(控件使用量少)
|------------------服务端-------------------------------||-------客户端------|
数据库 <-- SQLConnection <-- SQLQuery <-- DataSetProvider <--+--ClientDataSet
|--ClientDataSet
|--ClientDataSet
|--ClientDataSet
|--ClientDataSet
|--ClientDataSet
|--ClientDataSet
|--ClientDataSet
第二种做法:(控件使用量多)
|------------------服务端-------------------------------||-------客户端------|
数据库 <-- SQLConnection <-+ SQLQuery <-- DataSetProvider <--+--ClientDataSet
| |--ClientDataSet
| |--ClientDataSet
|
+ SQLQuery <-- DataSetProvider <--+--ClientDataSet
| |--ClientDataSet
| |--ClientDataSet
|
+ SQLQuery <-- DataSetProvider <--+--ClientDataSet
|--ClientDataSet
|--ClientDataSet
客户端是多窗体同时运行的程序,每个窗体都有好几个ClientDataSet与服
务端的DataSetProvider连接,也就是说同一时间内同一程序可能有十几个或几
十个ClientDataSet与同一个DataSetProvider相连,这种做法好吗?效率会不会
有问题?书中的例子有些是按这种方式连接的,但有的又是一个ClientDataSet对
应一个DataSetProvider的方式连接的。我只想用效率最高占用资源最少的方法!
 
我的问题是不是太刁钻了?为什么没人回呢?
 
没人会吗?
 
第二种种好。实践证明的。
 
呵呵,DataSetProvider 是可以复用的,把它看成”池“,客户端的CDS看成内存使用,
每次取数据就动态的得到一个DSP,用完还给服务器端。如果有端态的,就保留不给其
它用户使用。另外服务器端DSP可以动态创建。等等。我N久前就是这样做的,使用率极高。
用完就使空闲。
参照下面代码:
procedure TRDMCardServer.SelectData(const sSQL: WideString;
out pPrvName: WideString);
safecall;
var
ADOTemp: TADODataSet;
i_iCount, i_iTag: Integer;
begin
ADOTemp := ADODS40;
i_iTag := 0;
with frmServerdo
begin
if GetDBConnectionState <> 0 then
Exit;
end;

for i_iCount := 1 to pDSCountdo
begin
ADOTemp := TADODataSet(FindComponent('ADODS' + IntToStr(i_iCount)));
if ADOTemp.Active then
begin
Continue;
end
else
begin
i_iTag := i_iCount;
Break;
end;
end;

if i_iTag = 0 then
Exit;
with ADOTempdo
begin
CommandText := sSQL;
try
Open;
pPrvName := 'DSP' + Trim(IntToStr(i_iTag));
except
pPrvName := '';
Close;
end;
end;
end;

我有完成例子。你可以到http://www.delphibbs.com/keylife/iblog_show.asp?xid=18626
下来看看。
 
使用第二种方式.当然,如果采用DataProvider池也是可以的,相当于对第二种方式进行了优化.
第一种方式是不能采用的,因为,虽然CDS可以进行数据访问,但在进行数据更新时,可能会发生错误,因为,服务器端的DataProvider对不同数据的设置可能不同.
 
把CDS仅仅看成客户端内存使用,不要用来提交数据。数据自己打包。提交,到服务器后解包,生成SQL语句。但MIDAS就是MIDAS,小孩的玩具一样,呵呵。终究难冲破铁网象雄鹰一样展翅高飞。
 
谢谢高手们的赐教!
 
后退
顶部