Incompatible types:'TDBGridEh' and 'TDBGrid' 出现这个错误的解决方法
2009-02-28 17:42
525 查看
今天修改一个程序时出现以下错误提示:
[Error] Pastransact.pas(908): Incompatible types:
'TDBGridEh' and 'TDBGrid' 出现这个错误的解决方法:
一、..是因为我在公共程序里定义了TDBGridEh表格的事件过程:
Procedure OuttoExcel2(const
sFileName:string;sDataSet:TDataSet;GridEh:TDBGridEh);
.....
.....
二、原因是,我在下面的TDBGrid表格程序里调用调用了上面TDBGridEh的过程事件,所
以就出现了上面的提示错误,改为对应的TDBGrid事件就解决了.
procedure TFrmtransact.BitBtn1Click(Sender: TObject); //
begin
if Sender=BitBtn1 then OuttoExcel2
('excel0',Qryworkdate,DBGD);
// if Sender=BitBtn4 then QuickRep2.Preview;
end;
.....
.....
三、
引用网上"长尾兔的摆渡人生"大侠的另一种解决方法:
由DBGrid与DBGridEh的冲突,引发关于uses单元们的作用顺序的思
考
2007/10/16 下午 07:10
相信许多Delphi编程者都用过或体验过TDBGridEh这个第三方控
件。我前几天编程时,也试着去用DBGridEh,却小小地吃了一个苦
头。在此无意诋毁TDBGridEh(EhLib)或DBGrid,它们都是很好用的
数据感知表格控件,只不过它们之间有冲突而已。
事情经过是:
我在编一个铁路物流货场管理程序时,用到了表格控件,最初
,我用了DBGrid,但DBGrid无法直接设置表格的行高,于是我删掉
DBGrid,改用DBGridEh。至此一切正常。后来我发现其实行高不必
控制,于是我又把DBGridEh删掉,换做DBGrid。至此仍然一切正常
。
然后,问题来了。由于表格显示的数据记录需要区分来货和走
货,也就是说根据操作数量的正负,用不同的颜色显示每一条记录
。于是我在DBGrid的OnDrawColumnCell事件里写代码设置颜色,并
用DefaultDrawColumnCell方法重绘表格。代码写好后,运行......
奇怪!在DefaultDrawColumnCell那一行怎么提示“Incompatible
types”错误?
我脑袋开始晕了。应该不会是我设置和代码的问题啊!这个程
序很大,从头至尾编来,我几乎没有犯过任何错误的。无奈,旁观
者清,我求助于网友伴水清清。伴水说,是不是有哪个单元没有引
用啊?
伴水一言提醒了我。乖乖,倒不是哪个单元没有引用,而是多
引用了DBGridEh的两个单元!(向窗体上拖放DBGridEh时自动添加
的,而删掉控件时添加的单元并不自动删除)于是我把uses部分的
GridsEh, DBGridEh这两个单元引用删掉,OK。
由此我想,虽然DBGridEh和DBGrid的DefaultDrawColumnCell方
法参数数量是相同的。但DBGridEh的DefaultDrawColumnCell方法的
某个参数与DBGrid的该方法的某个参数的类型有细微不同。然后,
编译器对于同名方法实际是overload或override的(具体是哪个操
作,我没看,不敢乱说)。也就是说,假设在uses部分先后有A、B
两个单元,都有一个Proc方法,如果在程序中不指明使用的是哪个
单元的Proc方法,编译器会默认使用后者单元。
我懒得去查看DBGridEh是如何定义DefaultDrawColumnCell方法
的,朋友们可以去看一下,如果我说得不对,麻烦您联系我指正。
然后,如果把uses部分“GridsEh, DBGridEh,”这两个单元引用往
前移两个位置,移到“Grids, DBGrids,”前面去,就会出错。
如果把程序中注释掉的部分去掉注释,那么,随着“GridsEh,
DBGridEh,”和“Grids, DBGrids,”两个的谁在前谁在后,程序出
错的位置也分别变换出现在两个DefaultDrawColumnCell方法上。
[Error] Pastransact.pas(908): Incompatible types:
'TDBGridEh' and 'TDBGrid' 出现这个错误的解决方法:
一、..是因为我在公共程序里定义了TDBGridEh表格的事件过程:
Procedure OuttoExcel2(const
sFileName:string;sDataSet:TDataSet;GridEh:TDBGridEh);
.....
.....
二、原因是,我在下面的TDBGrid表格程序里调用调用了上面TDBGridEh的过程事件,所
以就出现了上面的提示错误,改为对应的TDBGrid事件就解决了.
procedure TFrmtransact.BitBtn1Click(Sender: TObject); //
begin
if Sender=BitBtn1 then OuttoExcel2
('excel0',Qryworkdate,DBGD);
// if Sender=BitBtn4 then QuickRep2.Preview;
end;
.....
.....
三、
引用网上"长尾兔的摆渡人生"大侠的另一种解决方法:
由DBGrid与DBGridEh的冲突,引发关于uses单元们的作用顺序的思
考
2007/10/16 下午 07:10
相信许多Delphi编程者都用过或体验过TDBGridEh这个第三方控
件。我前几天编程时,也试着去用DBGridEh,却小小地吃了一个苦
头。在此无意诋毁TDBGridEh(EhLib)或DBGrid,它们都是很好用的
数据感知表格控件,只不过它们之间有冲突而已。
事情经过是:
我在编一个铁路物流货场管理程序时,用到了表格控件,最初
,我用了DBGrid,但DBGrid无法直接设置表格的行高,于是我删掉
DBGrid,改用DBGridEh。至此一切正常。后来我发现其实行高不必
控制,于是我又把DBGridEh删掉,换做DBGrid。至此仍然一切正常
。
然后,问题来了。由于表格显示的数据记录需要区分来货和走
货,也就是说根据操作数量的正负,用不同的颜色显示每一条记录
。于是我在DBGrid的OnDrawColumnCell事件里写代码设置颜色,并
用DefaultDrawColumnCell方法重绘表格。代码写好后,运行......
奇怪!在DefaultDrawColumnCell那一行怎么提示“Incompatible
types”错误?
我脑袋开始晕了。应该不会是我设置和代码的问题啊!这个程
序很大,从头至尾编来,我几乎没有犯过任何错误的。无奈,旁观
者清,我求助于网友伴水清清。伴水说,是不是有哪个单元没有引
用啊?
伴水一言提醒了我。乖乖,倒不是哪个单元没有引用,而是多
引用了DBGridEh的两个单元!(向窗体上拖放DBGridEh时自动添加
的,而删掉控件时添加的单元并不自动删除)于是我把uses部分的
GridsEh, DBGridEh这两个单元引用删掉,OK。
由此我想,虽然DBGridEh和DBGrid的DefaultDrawColumnCell方
法参数数量是相同的。但DBGridEh的DefaultDrawColumnCell方法的
某个参数与DBGrid的该方法的某个参数的类型有细微不同。然后,
编译器对于同名方法实际是overload或override的(具体是哪个操
作,我没看,不敢乱说)。也就是说,假设在uses部分先后有A、B
两个单元,都有一个Proc方法,如果在程序中不指明使用的是哪个
单元的Proc方法,编译器会默认使用后者单元。
我懒得去查看DBGridEh是如何定义DefaultDrawColumnCell方法
的,朋友们可以去看一下,如果我说得不对,麻烦您联系我指正。
然后,如果把uses部分“GridsEh, DBGridEh,”这两个单元引用往
前移两个位置,移到“Grids, DBGrids,”前面去,就会出错。
如果把程序中注释掉的部分去掉注释,那么,随着“GridsEh,
DBGridEh,”和“Grids, DBGrids,”两个的谁在前谁在后,程序出
错的位置也分别变换出现在两个DefaultDrawColumnCell方法上。
相关文章推荐
- E2015 Ambiguity between 'ULONG_PTR' and 'Wmplib_tlb::ULONG_PTR' 这个错误怎么解决?终极解决办法
- 使用jfreechart画图时,出现错误 Null 'key' argument的解决方法
- python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- TZipMaster出现错误:failed to load 'unzdll.dll'的解决方法
- python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- swift编码出现Call can throw, but it is not marked with 'try' and the error is not handled错误的解决
- 编译VTK6.1.0在vtkGUISupportQt-6.1.dll项上出现错误'GLdouble' : redefinition的解决方法
- VC++ 出现错误:cannot convert from const char *' to 'LPCWSTR' 或者'const char [7]' to 'LPCWSTR' 的解决方法
- 使用AJAX时出现“Microsoft JScript 运行时错误: 'Sys' 未定义”提示的解决方法
- MySQL Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (utf8_general_ci,IMPLICIT) for operation 'UNION' 错误解决方法
- 关于Error 1 error C1189: #error : "include 'stdafx.h' before including this file这个错误的解决方法
- VC++6.0原始套接字出现 C2065:'SIO_RCVALL' : undeclared identifier错误的解决方法
- 2、Swift出现Missing argument label 'XX:'in call 错误的解决方法
- asp中出现这种错误 '80020009' 的解决方法
- 编译boost程序出现如下错误fatal error LNK1104: cannot open file 'libboost_system-vc100-mt-gd-1_54.lib'的解决方法
- php当中出现的错误:Use of undefined constant title - assumed 'title'的解决方法
- 举例android项目中的string.xml出现这个The character reference must end with the ';' delimiter.错误提示的原因及解决办法
- mysql 出现表损坏解决方法:table 'xxx' is marked as crashed and should be repaired
- PHP 5.3.10 编译安装时出现 undefined reference to `libiconv' 错误的解决方法
- 出现Terminating app due to uncaught exception 'NSUnknownKeyException', reason: 错误的解决方法