我在窗体上放了一个TADOQuery,因为这个TADOQuery可以用于多种情况的查询,也就是说每次我都是动态加载SQL语句,这样,TADOQuery里边的字段就会不一样,可是我又很需要处理这些字段的OnGetText事件
首先我定义了GetText过程,其参数和OnGetText事件是一样的,如下:
procedure TForm1.GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
with ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('select CompName from CompInfo where CompID=:CompID');
Parameters.ParamByName('CompID').Value:=Sender.Value;
Open;
end;
Text:=ADOQuery2.fieldByName('CompName').AsString;
end;然后根据查询的表名动态处理OnGetText事件,如下:
procedure TForm1.FormCreate(Sender: TObject);
var
DisplayText:Boolean;
Text:String;
begin
if g_TableName='Sales' then
ADOQuery1.Fields[1].OnGetText:=GetText(ADOQuery1.Fields[1],Text,DisplayText)
else if g_TableName='AA' then
。。
else
。。
end;
可下面这样的语句老报错:(应该怎样做呀???????)
ADOQuery1.Fields[1].OnGetText:=GetText(ADOQuery1.Fields[1],Text,DisplayText)
首先我定义了GetText过程,其参数和OnGetText事件是一样的,如下:
procedure TForm1.GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
with ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('select CompName from CompInfo where CompID=:CompID');
Parameters.ParamByName('CompID').Value:=Sender.Value;
Open;
end;
Text:=ADOQuery2.fieldByName('CompName').AsString;
end;然后根据查询的表名动态处理OnGetText事件,如下:
procedure TForm1.FormCreate(Sender: TObject);
var
DisplayText:Boolean;
Text:String;
begin
if g_TableName='Sales' then
ADOQuery1.Fields[1].OnGetText:=GetText(ADOQuery1.Fields[1],Text,DisplayText)
else if g_TableName='AA' then
。。
else
。。
end;
可下面这样的语句老报错:(应该怎样做呀???????)
ADOQuery1.Fields[1].OnGetText:=GetText(ADOQuery1.Fields[1],Text,DisplayText)
你可以在 GetText 方法中设置断点,再调试看看
根本无法编辑
showmessage(Text);
我把上边的给事件赋值去掉,运行上边的语句没问题。
ADOQuery1.Fields[1].OnGetText:=GetText(ADOQuery1.Fields[1],Text,DisplayText)RE: 你把 GetText 定义成窗体的成员函数即可。
然后:
ADOQuery1.Fields[1].OnGetText:=GetText;
即可,不要带参数。带参数就成了函数调用了。
换成你那句报错信息如下:Not enough actual parameters
不信,大家也可以运行一下试试咯