function GetData(Aname:string):integer;
var age:integer;
    sex:string;
begin
    age:=0;
    sex:='';
    with AdoQuery1 do
    begin
        close;
        sql.text:='select * from 员工表 where 姓名='''+AName+'''';
        open;
        if Not Eof then 
        begin
           age:=FieldByName('年龄').asInteger;
           sex:=FieldByName('性别').asString;
        end; 
    end; 
    Result:=age;
end;   这个function只能返回 age,但是我想把 sex 也返回,那该怎么写??

解决方案 »

  1.   

    type
      TPerson = Record
          age: integer;
          Sex: Sex;
      end;
    function GetData(Aname:string):TPerson;
    begin
        with AdoQuery1 do
        begin
            close;
            sql.text:='select * from 员工表 where 姓名='''+AName+'''';
            open;
            if Not Eof then 
            begin
               Result.age:=FieldByName('年龄').asInteger;
               Result.sex:=FieldByName('性别').asString;
            end; 
        end; 
      end;
      

  2.   

    hehe  
    up 一下
      

  3.   

    可以用过程返回数组
    procedure GetData(Aname:string;var array of variant);
      

  4.   

    同意楼上的,不但可以用function返回值,用procedure也是可以的,如果你用传址型参数来返回值的话,建议你用下面的方法:
    procedure GetData(const Aname : string ; var ASex : string ; var Age : integer);
    begin
        with AdoQuery1 do
        begin
            close;
            sql.text:='select * from 员工表 where 姓名='''+AName+'''';
            open;
            if Not Eof then 
            begin
               Age:=FieldByName('年龄').asInteger;
               ASex:=FieldByName('性别').asString;
            end; 
        end; 
    end;
    在调用上面过程的过程或函数里声明变量myAge和mySex,然后因为你采用的是传址的方法,也就是引用的方法,GetData过程将直接修改myAge和mySex的值,比如调用示例:
    GetData(myAge , mySex);   //经过调用值已经改变
    还有一种方法是采用out参数进行输出,但它的实质和var参数基本相同。另外注意:
    procedure GetData(const Aname : string ; var ASex : string ; var Age : integer);
    Aname参数使用了const修饰,表示在过程中不发生改变,这样做可以优化代码,当然你不使用也没有错了。
      

  5.   

    我认为有三种方法:
    1、使用引用传递参数的方式获取多个返回值
    2、通过不定长的Variant类型数组接收多个返回值
    3、自定义结构体,通过哦结构体返回多个值
      

  6.   

    最简单的方法是声明function GetData(Aname:string,var Sex:string):integer;返回值写到SEX参数里
      

  7.   

    to creativepeter(头皮屑) :
    GetData(myAge , mySex);   //经过调用值已经改变1、是不是应该GetData(aname,myAge , mySex);   //经过调用值已经改变;2、其次,aname就是所谓的形参,而myage和mysex则是变参吧。不知道理解的对不对
      

  8.   

    本人 习惯用  linzhisong(無聊) 的方法
    type
      TPerson = Record
          age: integer;
          Sex: Sex;
      end;
    function GetData(Aname:string):TPerson;
    begin
        with AdoQuery1 do
        begin
            close;
            sql.text:='select * from 员工表 where 姓名='''+AName+'''';
            open;
            if Not Eof then 
            begin
               Result.age:=FieldByName('年龄').asInteger;
               Result.sex:=FieldByName('性别').asString;
            end; 
        end; 
      end;
      

  9.   

    To--->lovefox_zoe(爱情狐狸),你写的正确,呵呵,我漏了一个。还有,如果aname前面啥都没有,就是形参,系统将在栈中分配内存,拷贝aname的值,当过程退出时释放动态内存。
    如果是const aname不是形参,系统不分配内存,取得常量参数的引用,指向常量参数的内存块,并且在过程中不能改变其值。系统将进行必要优化。
    如果是var aname不是形参,系统不分配内存,取得变量参数的引用,指向变量参数的内存块,并且在过程中可以改变其值。