事件方法必须是类的方法

我的本意是想在一个通用unit单元中定义一个通用的查询函数,在这个通用查询函数中调用字段的ongettext方法来解析值为代码的字段(如:表的性别字段存储的是代码,'1':男,'2'女),在DBGridEh中性别显示的是名称男或女,而表中字段存储的是'1'或'2'

由于想尽可能做的通用,不希望用联合查询,要用Ongettext

难道要在每个TADOQuery控件中写Ongettext事件,可是所有的TADOQuery都放在了datamodule1中,查询sql是在不同窗体中写的

要怎么做?



type

   TEventHandlers = 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; 

 

你可能感兴趣的:(方法)