在程序的public中声明了公用类,其中有7,8个string,现在想声明一个公用function,返回声明的公用类,我原以为要这样:
function GetDURG(InPUT:STRING):Class;  谁知道不对,请教该如何声明。
并且,该function中还有查询数据库的要求,

解决方案 »

  1.   

    这样写吧
    proceudre GetDURG(InPUT:STRING;var myclass:tmyclass);
      

  2.   

    对了,在里面如何添加adoquery之类的查询控件,
      

  3.   

    proceudre GetDURG(InPUT:STRING;myquery:Tdataset;var myclass:tmyclass);
      

  4.   

    proceudre GetDURG(InPUT:STRING;mydataset: Tdataset;myquery:tquery;var myclass:tmyclass);
      

  5.   

    to d983074(d983074)信誉:100 
    在public 里没法添加控件,这个procedure是很多窗体都要用到的。
    出错:
    undeclared indetifier:'tadodataset';
      

  6.   

    还是不对:报错:
    unsaftisfied forward or externaldeclaration:"getDrugs"
      

  7.   

    我详细的向您汇报一下吧:
    在public里声明两共用类,其一纪录一些登陆信息(查询条件),临一个记录查询结果,在主窗体中获得登陆信息,在其他窗体中调用procedure or function, 查询数据库返回查询结果
    这该如何写。
      

  8.   

    interface 
    uses ....., ADODB;proceudre GetDURG(InPUT: string; myQuey: TAOQuery; var myclass: tmyclass);
      

  9.   

    我都试过,没问题
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ADODB;type
      TMy = class
      public
        str1:string;
        str2:string;
      end;
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        function getclass(adods:tadodataset):tmy;
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}function tform1.getclass(t:tadodataset):tmy;
    begin
      result.str1:='result';
      result.str2:='result2';
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      showmessage(getclass(nil).str1);
      showmessage(getclass(nil).str2);
    end;end.
      

  10.   

    我都试过,没问题
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ADODB;type
      TMy = class
      public
        str1:string;
        str2:string;
      end;
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        function getclass(adods:tadodataset):tmy;
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}function tform1.getclass(adods:tadodataset):tmy;
    begin
      result.str1:='result';
      result.str2:='result2';
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      showmessage(getclass(nil).str1);
      showmessage(getclass(nil).str2);
    end;end.
      

  11.   

    我的public 是没有窗体的unit,不是像你的一般窗体。
      

  12.   

    unit Us_Public;
    interface
    uses
    SysUtils,adodb;
      type Drugs=class
        InnerID:string;
        DrugName:string;
        AliasName:string;
        InterID:string;    DrugID:string;
        CateID:string;
        BigUnit:string;
        PackUnit:string;
        MinUNit:string;
        MinQuan:double;
        PackQuan:double;
        InPrice:double;
        WholePrice:double;
        SellPrice:double;
        PackPrice:double;
        SelfRate:double;
        AlerQuan1:double;
        AlerQuan2:double;
        CustID:string;
        DrugInterID:string;
        MedicareID:string;
        MedicareClass1:string;
        MedicareSelfRate1:double;
        MedicareClass2:string;
        MedicareSelfRate2:double;
        MedicareClass3:string;
        MedicareSelfRate3:double;
        OkFlagName:boolean;
        OkFlagSpecify:boolean;
      end;
      type Users=class
        UserName:string;
        PerID:string;
        PerName:string;
        WBorPY:string;
      end;
    var
       S_Table,S_Field1,S_Field2:String;
       I_Field1,I_Field2:String;
       Flag:String;
       EditFlag:String;implementationuses Us_StockMain, Us_DMHos;
    end.
      

  13.   

    没什么区别的。
    另:类不是这样写的,没有提供类成员的属性,外部没有访问这些成员的权限,你这样是record的写法。
      

  14.   

    请教请教,正确的写法应该是什么样的,我是从vb转过来的,有点照着vb套的。
      

  15.   

    给个Delphi帮助里的例子。
    For example, here is the declaration of the TMemoryStream class from the Classes unit.typeTMemoryStream = class(TCustomMemoryStream)
      private
        FCapacity: Longint;
        procedure SetCapacity(NewCapacity: Longint);
      protected
        function Realloc(var NewCapacity: Longint): Pointer; virtual;
    ************************
        property Capacity: Longint read FCapacity write SetCapacity;//属性Capacity,直接读取FCapacity,通过方法SetCapacity存储新值到FCapacity
    ************************
      public
        destructor Destroy; override;
        procedure Clear;
        procedure LoadFromStream(Stream: TStream);    procedure LoadFromFile(const FileName: string);
        procedure SetSize(NewSize: Longint); override;
        function Write(const Buffer; Count: Longint): Longint; override;
      end;
      

  16.   

    还是用record吧,简单方便,这里也没必要非用类
    至于类,还是先看看关于面向对象方面的书吧。
      

  17.   

    用record可以实现嵌套Ado查询,并返回查询结果的功能吗?
      

  18.   

    嘿嘿,我也觉得是有点弱智,但是为了达道目标也只有先当弱智了,
    我以前用vb做的类似的程序可以达到该功能,现在用delphi就不知道该增么写了。
    虚心求教。
      

  19.   

    Delphi里的record相当于C里的struct。
    ado的嵌套查询没用过,把参数代入生成SQL语句就行了吧。
    type 
      TUsers=record
        UserName:string;
        PerID:string;
        PerName:string;
        WBorPY:string;
      end;...
    ...var
      users:tusers;...
     users.username:=....
    ...