我在窗体上放了一个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)

解决方案 »

  1.   

    我估计你是把 CompID 字段类型搞错了,导致 SQL 语法错误,
    你可以在 GetText 方法中设置断点,再调试看看
      

  2.   

    错误信息:Incompatible types: 'TFieldGetTextEvent' and 'procedure, untyped pointer or untyped parameter'
    根本无法编辑
      

  3.   

    GetText(ADOQuery1.Fields[1],Text,DisplayText);
    showmessage(Text);
    我把上边的给事件赋值去掉,运行上边的语句没问题。
      

  4.   

    ADOQuery1.Fields[1].OnGetText:=GetText();
      

  5.   

    可下面这样的语句老报错:(应该怎样做呀???????)
         ADOQuery1.Fields[1].OnGetText:=GetText(ADOQuery1.Fields[1],Text,DisplayText)RE: 你把 GetText 定义成窗体的成员函数即可。
    然后:
        ADOQuery1.Fields[1].OnGetText:=GetText;
    即可,不要带参数。带参数就成了函数调用了。
      

  6.   

    ADOQuery1.Fields[1].OnGetText:=GetText(ADOQuery1.Fields[1],Text,DisplayText)这句话错了。这样就可以了:ADOQuery1.Fields[1].OnGetText:=GetText;
      

  7.   

    哦,有人回答了啊。没有看到。嘿嘿。抱歉。OnGetText就是一个事件,就是一个函数指针,直接用函数名称就是了,不用带参数。
      

  8.   

    meiqingsong(阿飛)兄:
    换成你那句报错信息如下:Not enough actual parameters
    不信,大家也可以运行一下试试咯