ExpressQuantumGrid.Suite.v5.11 奇怪的问题.(200分)

  • 主题发起人 主题发起人 AHLKJ
  • 开始时间 开始时间
A

AHLKJ

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用的是 ExpressQuantumGrid.Suite.v5.11 ,我在新建一个空白项目的时候使用此控件编译运行程序没有任何问题.
当我把控件加到我以前做的一个项目里面的时候不能编译(以前的项目可以正常编译执行的),错误信息如下:

[Error] cxDBFilter.pas(62): Undeclared identifier: 'TcxDBAdapterItem'
[Error] cxDBFilter.pas(62): Class type required
[Error] cxDBFilter.pas(71): Undeclared identifier: 'TcxDBAdapterList'
[Error] cxDBFilter.pas(82): Operator not applicable to this operand type
[Error] cxDBFilter.pas(92): Incompatible types: 'TcxDBFilterOperatorAdapter' and 'String'
[Error] cxDBFilter.pas(97): Statement expected but 'FUNCTION' found
[Error] cxDBFilter.pas(119): Missing operator or semicolon
[Error] cxDBFilter.pas(120): Missing operator or semicolon
[Error] cxDBFilter.pas(123): Missing operator or semicolon
[Error] cxDBFilter.pas(50): Unsatisfied forward or external declaration: 'TcxFilterSQLNullOperator.FilterText'
[Fatal Error] cxDBData.pas(44): Could not compile used unit 'cxDBFilter.pas'


cxDBFilter.pas 内容如下:


unit cxDBFilter;

{$I cxVer.inc}

interface

uses
DB, cxFilter, cxDB;

type
{ TcxFilterSQLNullOperator }

TcxFilterSQLNullOperator = class(TcxFilterNullOperator)
public
function FilterText: string; override;
end;

{ TcxFilterSQLNotNullOperator }

TcxFilterSQLNotNullOperator = class(TcxFilterNotNullOperator)
public
function FilterText: string; override;
end;

{ TcxDBFilterOperatorAdapter }

TcxDBFilterOperatorAdapter = class(TcxDBAdapterItem)
public
procedure PrepareOperatorClass(ASender: TObject; ADataSet: TDataSet;
var AOperatorClass: TcxFilterOperatorClass); virtual;
end;

function cxGetFilterOperatorAdapter(ADataSet: TDataSet): TcxDBFilterOperatorAdapter;

var
cxFilterOperatorAdapters: TcxDBAdapterList;

implementation

uses
SysUtils;

function cxGetFilterOperatorAdapter(ADataSet: TDataSet): TcxDBFilterOperatorAdapter;
var
AIndex: Integer;
begin
if Assigned(ADataSet) and cxFilterOperatorAdapters.FindAdapter(TDataSetClass(ADataSet.ClassType), AIndex) then
Result := cxFilterOperatorAdapters[AIndex] as TcxDBFilterOperatorAdapter
else
Result := nil;
end;

{ TcxFilterSQLNullOperator }

function TcxFilterSQLNullOperator.FilterText: string;
begin
Result := 'IS';
end;

{ TcxFilterSQLNotNullOperator }

function TcxFilterSQLNotNullOperator.FilterText: string;
begin
Result := 'IS NOT';
end;

{ TcxDBFilterOperatorAdapter }

procedure TcxDBFilterOperatorAdapter.PrepareOperatorClass(ASender: TObject;
ADataSet: TDataSet; var AOperatorClass: TcxFilterOperatorClass);
begin
if AOperatorClass.InheritsFrom(TcxFilterNullOperator) or
AOperatorClass.InheritsFrom(TcxFilterNotNullOperator) then
begin
if Pos(AnsiUpperCase('Query'), AnsiUpperCase(ADataSet.ClassName)) <> 0 then
if AOperatorClass.InheritsFrom(TcxFilterNotNullOperator) then
AOperatorClass := TcxFilterSQLNotNullOperator
else
AOperatorClass := TcxFilterSQLNullOperator;
end;
end;

initialization
cxFilterOperatorAdapters := TcxDBAdapterList.Create;
cxFilterOperatorAdapters.RegisterAdapter(TDataSet, TcxDBFilterOperatorAdapter);

finalization
cxFilterOperatorAdapters.Free;
cxFilterOperatorAdapters := nil;

end.

cxDB.pas 中有 TcxDBAdapterItem 类的定义.
 
不会吧?
 
把你以前项目里所有搜索路径里所有.dcu文件删除
 
你以前的项目是不是使用过其他版本的ExpressQuantumGrid?
如果是,仔细清理引用的单元再重新编译。
 
To 轻舞肥羊
谢谢哥们的回答,我删除了项目中搜索路径,删除了项目编译的所有 DCU 文件~重新编译程序还是存在上述的问题.我 ExpressQuantumGrid.Suite.v5.11 使用 http://www.2ccc.com/article.asp?articleid=3078 里下载的安装版本.
 
To zywcd
以前的项目中从未使用过 DevExpress 公司的任何的组件.以前的项目中没有使用任何第三方组件.
 
重建项目.dpr文件,然后重建单元cxDBFilter.pas,最后把原先的代码Copy过来,然后编译试试看
 
问题解决了,在N层单元里找到一个CXDB引用,而且没有加到项目中来.

哎,修改这样的项目真的很痛苦痛苦.一个小小的销售管理软竟写了13万行,真不知道作者是怎么想的。

感谢 楼上的哥们的响应.
 

Similar threads

A
回复
0
查看
971
Andreas Hausladen
A
S
回复
0
查看
570
SUNSTONE的Delphi笔记
S
S
回复
0
查看
662
SUNSTONE的Delphi笔记
S
S
回复
0
查看
640
SUNSTONE的Delphi笔记
S
S
回复
0
查看
668
SUNSTONE的Delphi笔记
S
后退
顶部