您的位置:首页 > 产品设计 > UI/UE

adoquery + dsp + clientdataset + dbgrideh 数据排序的问题;

2013-12-24 15:27 274 查看
在维护COM+结构的三层结构的软件时,如果在服务端使用adoquery 查询后由 DSP 打包再传到客户端。

这种方式,效率很低,,通常查询结果,是不再需要 apply 到服务器的。

所以,我自己采用的方式,是在服务器端用 adoquery 查询,然后直接将 ADO结果直接传到客户端(不再经过DSP),然后再在客户端使用 adoquery 来接收数据;这样数据高效。

但是在客户端直接使用datasource 去连接 adouqery ,再使用 dbgrideh 来显示数据,在使用 dbgrideh 的数据排序就不能简单的使用ehlib 提供的简单的排序功能;

因为客户端的adoquery组件是没有设置 connection 及 connectioinstring 属性。所以,会出错错误;

所以,客户端的结构改为:

服务器 adoqery -> 客户 adoquery + dsp + clientdataset + dbgrideh 。

由于 clientdataset 是一个很优秀的数据集,但是仍然有些问题,所以我使用了 wwclientdataset 组件。

就算这样,仍然不能简单的使用Ehlib简单的排序功能,所以要自己写代码去支持它;

procedure TDM.PubP_OnTitleBtnClick(Sender: TObject; ACol: Integer;
Column: TColumnEh;C:TwwClientDataSet);
var
OldIndex,NewIndex: string;
begin
C.DisableControls;
OldIndex:= C.IndexName;
NewIndex:= Column.FieldName;
if OldIndex <> '' then  begin
C.IndexName:= '';
C.DeleteIndex(OldIndex);
end;
case Column.Title.SortMarker of
smNoneEh, smDownEh:
begin
C.AddIndex('px', NewIndex,  [ixPrimary]);
Column.Title.SortMarker:= smDownEh;
end;
smUpEh  :
begin
C.AddIndex('px', NewIndex, [ixDescending]);
Column.Title.SortMarker:= smUpEh;
end;
end;
C.IndexName:= 'px';
C.First;
C.EnableControls;
end;
调用:

在 DBGRIDEH的 onTitleBtnClick 中写代码

dm.PubP_OnTitleBtnClick(Sender,ACol,Column ,CDS_QueryPOSat);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: