Incompatible types: ‘method pointer and regular procedure‘,动态绑定事件出现这类错误

下面定义的函数和过程都在同一个公共单元中(非窗体单元)

在一个函数中调用方式如下(调用行,就是这一行出错):
datamodule1.query1.FieldByName('XB').OnGetText:=GetName;

在同一个单元中定义的过程如下:
procedure 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;

解决方法:事件方法必须是类的方法 

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; 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值