打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
EhLib 4.1 在 Delphi 2007 下无法过滤和排序的问题
EhLib 4.1 在 Delphi 2007 下无法过滤和排序的问题
http://www.21tx.com/ 2007年10月06日

  今天将一个程序升级到了 Delphi 2007,该程序是用Delphi7开发的,程序中用到了一个第三方组件EhLib。

  原先的 EhLib 是v3.6,无法在Delphi2007下安装,所以安装了最新的 v4.1。

  原先正常的程序,在升级后,发现 DBGridEh 无法进行排序和过滤,执行操作时无反应。后来发现,如果选择本地过滤和排序的话,一切都会正常;如果是服务器端排序和过滤,则无法正常执行,错误信息为类型转换错误。

  跟踪EhLib代码发现,是DBUtilsEh.pas文件中的SetDataSetSQLLikeProp 和IsDataSetHaveSQLLikeProp 函数中的以下相关代码报错:

……
if (TObject(GetOrdProp(DataSet, FPropInfo)) as TStrings) <> nil then
SQLPropValue := (TObject(GetOrdProp(DataSet, FPropInfo)) as TStrings).Text
……

  具体的类型转换错误是指TObject与TStrings转换错误,所以报错。

  我用的是ADOQuery,其SQL属性在Delphi7下是TStrings类型,在Delphi2007下是TWideStrings,由TObject转换为TStrings按理说不应该转换不成功啊。

  继续查看代码才发现:

  TWideStrings没有继承自TStrings,而是继承自TPersistent,理论上跟TStrings没有关系,将他转换为TStrings,当然会报错了。

  找到原因后,将EhLib相关出错函数的代码改为以下:

……
if TObject(GetOrdProp(DataSet, FPropInfo)) is TStrings then
SQLPropValue := (TObject(GetOrdProp(DataSet, FPropInfo)) as TStrings).Text
else if TObject(GetOrdProp(DataSet, FPropInfo)) is TWideStrings then
SQLPropValue := (TObject(GetOrdProp(DataSet, FPropInfo)) as TWideStrings).Text
else
Exit;
……

  修改后,重新编译,一切正常。

  附1:修改后的DBUtilsEh.pas文件;

  附2:在Delphi2007中安装EhLib4.1时会报错,注释掉EhLibVCL.pas文件中的“TBytes = array of Byte”行即可正常安装(Delphi2007自己定义了TBytes)。

上一篇: Delphi 2007 先睹为快
下一篇: 关于Delphi 2007的几个东东

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Delphi中的容器类(转)
Delphi ADOStoredProc 存储过程用法
Delphi制作的TDBEdit应用实例
DBGridEh使用技巧
delphi 获取打印机 fastreport指定打印机
Delphi读写ini文件需要引用'IniFiles'单元
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服