下面定义的函数和过程都在同一个公共单元中(非窗体单元)在一个函数中调用方式如下(调用行,就是这一行出错):
datamodule1.query1.FieldByName('XB').OnGetText:=GetName;在同一个单元中定义的过程如下:
procedure GetName(Sender: TField; var Text: String; DisplayText: Boolean);
beginwith datamodule1.query1 dobeginclose;sql.Clear;sql.Add('select [name] from [sex] where [code]=:x');Parameters[0].Value:=Sender.Value;open;Text:=Fields[0].AsString;end;
end;
解决方法:事件方法必须是类的方法
typeTEventHandlers = class { 建一个虚拟类}procedure GetName(Sender: TField; var Text: String; DisplayText: Boolean);end;...
var EvHandler:TEventHandlers;implementation{方法实现}
procedure TEventHandlers.GetName(Sender: TField; var Text: String; DisplayText: Boolean);
begin with datamodule1.query1 do begin close; sql.Clear; sql.Add('select [name] from [sex] where [code]=:x'); Parameters[0].Value:=Sender.Value; open; Text:=Fields[0].AsString; end;
end;{使用}
datamodule1.query1.FieldByName('XB').OnGetText:= EvHandler.GetName;