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

在维护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); 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值