各位高手好 我是刚开始学Delphi,在一个新建的单元文件中定义类时出现了些问题
如下:
///////////////////////////////////
unit UFunc;interface
uses classes;type
 Tuser=class(tobject)
  userid: string;
  
 public
   procedure  setfields(query: tQuery);
 end;implementation   procedure Tuser.setfields(query:tquery);
     begin
       with query do
       begin 
         fieldbyname('useid').asstring:= userid;
         post;
      end;
     end;
  end
///////////////////////////
以上是要敲入的代码,当输入fieldbyname('useid')之后的 . 时,下面的提示中出现以下错误:
"[PascalError]UFunc.pas(1):Unable to invoke Code Code Completion due to errors in souce code"在声明class 类Tuser的过程: procedure  setfields(query: tQuery);用"query: tQuery“做参数应该正确吧?在下面的实现中为什莫不能用fieldbyname 呢? 
悉心等待各位高手的指教

解决方案 »

  1.   

    没有包含TQuery所在的单元文件interface
    uses
      Classes, DBTables, DB;
      

  2.   

    需要引用TQuery控件的单元文件才能声明该控件类型作为参数变量,以及使用其方法,当然首先还得Create。
    interface
    uses classes, DBTables;
    var
      qry: TQuery;
    begin
      // ...
      qry := TQuery.Create(nil);
      try
        qry.Close;
        qry.SQL.Text := 'Select * From Table1';
        qry.Open;
        ShowMessage(qry.Fields[0].AsString);
      finally
        FreeAndNil(qry);
      end;
      // ...
    end;
      

  3.   

    好了 ,现在没有错误了 ,编译成功 很高兴啊 
    十分感谢楼上解答阿那也就是说Tquery 类是在DBTble ,DB 单元文件中了,是吗?
      

  4.   

    为什么 还 creat 
    引用控件所在的单元文件后  直接声明行不行阿?像 uses DBTble,DB; 然后 在参数中:( query: tquery)请指点 谢谢
      

  5.   

    如果再在fieldbyname('useid').asstring:= userid;下面输入一条同样的语句:
    fieldbyname('usename').asstring:=username;时又出现了刚才那样的错误,username 在已经声明了 username:string.不知为何??
      

  6.   

    如果你想吃苹果,必须先“有”(Create)这个苹果才可以“吃”(FieldByName),除非这个苹果原来就有的,你只不过是拿来用(Reference)
      

  7.   

    学习很多
    有些理解了。。刚才编译通过了 但是在上一条fieldbyname语句之后再一次调用fiedbyname 时 同样的问题又出现了。已经引用了DBtbales ,DB单元文件了,这是为什么呢?