捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
EhLibCDS和Midas源码中发现的问题修正
关键字:EhLibCDS Midas hbcore 缺陷修正 排序 索引
来 自:原创
平 台:Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:初级 完成时间:2007/11/11
发布者:chh1999 发布时间:2007/11/11
编辑器:DELPHI7 语  种:简体中文
分 类:数据库 下载浏览:294/8601
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
无图片
使用EhLibCDS进行排序时发现Lookup字段不能排序,于是跟踪源码,发现第113行:
  IndexFields := IndexFields + SortMarkedColumns[i].FieldName + ';';
没有对Lookup字段进行判段,下面的
  IndexDescFields := IndexDescFields + SortMarkedColumns[i].FieldName + ';';
也是如此,于是修改了源码,实现当对Loopup字段排序时,转换成对其KeyField的排序。
源码如下:
          for i := 0 to SortMarkedColumns.Count - 1 do
          begin
          if SortMarkedColumns[i].Field.FieldKind = fkLookup then
          IndexFields := IndexFields + SortMarkedColumns[i].Field.KeyFields + ';'
          else
          IndexFields := IndexFields + SortMarkedColumns[i].FieldName + ';';
          if SortMarkedColumns[i].Title.SortMarker = smUpEh then
          begin
          if SortMarkedColumns[i].Field.FieldKind = fkLookup then
          IndexDescFields := IndexDescFields + SortMarkedColumns[i].Field.KeyFields + ';'
          else
          IndexDescFields := IndexDescFields + SortMarkedColumns[
          i].FieldName + ';';
          end;
        end;
EhlibADO、EhlibBDE中是否也有这样的问题,没有测试。

另外,当点击DBGridEh的Title进行排序时,发现如果ClientDataset没有设置过IndexFieldNames,用Midas源码编译过的Midas.dll,会产生DBERR_NOSUCHINDEX错误,而系统Midas.dll则不会出错。分析源码,发现Midas源码中,hbcore.pas中的TDSCursor.UseIndexOrder函数出错。如果设置过ClientDataset设置过IndexFieldNames,其IndexDefs中会自动添加一个Name=''的IndexDef,否则没有。如果
  I := FDSBase.FindIndex(pszName);
中的pszName=''时,I<0,引出DBERR_NOSUCHINDEX错误。
因此,修改源码如下:
  if (not Assigned(pszName)) or ((StrPas(pszName) = '') and (FDSBase.FindIndex(pszName) < 0)) then
  begin
    if FIsDelta then
      DefIndexName := szDEFAULT_ORDER else
      DefIndexName := szPRIMARY_KEY;

    if FDSBase.FindIndex(DefIndexName) >= 0 then
      pszName := DefIndexName else
      pszName := szDEFAULT_ORDER;
  end;
问题解决。
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论1条 当前显示最后1条评论
jemsn 2007/11/15 17:21:28
EhlibADO怎么修改?
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表