如何从一个自定义的function 中返回多个值??

138075 2004-07-01 05:13:20

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 也返回,那该怎么写??
...全文
384 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandyboy 2004-07-01
  • 打赏
  • 举报
回复
恩 记录方便点
lovewjp 2004-07-01
  • 打赏
  • 举报
回复
自定义一个结构做为返回的类型!
creativepeter 2004-07-01
  • 打赏
  • 举报
回复
To--->lovefox_zoe(爱情狐狸),你写的正确,呵呵,我漏了一个。

还有,如果aname前面啥都没有,就是形参,系统将在栈中分配内存,拷贝aname的值,当过程退出时释放动态内存。
如果是const aname不是形参,系统不分配内存,取得常量参数的引用,指向常量参数的内存块,并且在过程中不能改变其值。系统将进行必要优化。
如果是var aname不是形参,系统不分配内存,取得变量参数的引用,指向变量参数的内存块,并且在过程中可以改变其值。
ssk0532 2004-07-01
  • 打赏
  • 举报
回复
设全局变量也行
gabrielnystrom 2004-07-01
  • 打赏
  • 举报
回复
用记录集合的方法比较好,同意楼上的
YOHOYOHO 2004-07-01
  • 打赏
  • 举报
回复
本人 习惯用 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;
lovefox_zoe 2004-07-01
  • 打赏
  • 举报
回复
to creativepeter(头皮屑) :
GetData(myAge , mySex); //经过调用值已经改变

1、是不是应该GetData(aname,myAge , mySex); //经过调用值已经改变;

2、其次,aname就是所谓的形参,而myage和mysex则是变参吧。不知道理解的对不对
delphi_xizhousheng 2004-07-01
  • 打赏
  • 举报
回复
要取得变化后的变量值的方法两种:
用函数的返回值;
用变参的方法传递参数
officecn 2004-07-01
  • 打赏
  • 举报
回复
最简单的方法是声明function GetData(Aname:string,var Sex:string):integer;返回值写到SEX参数里
Taken 2004-07-01
  • 打赏
  • 举报
回复
我认为有三种方法:
1、使用引用传递参数的方式获取多个返回值
2、通过不定长的Variant类型数组接收多个返回值
3、自定义结构体,通过哦结构体返回多个值
xt_pan 2004-07-01
  • 打赏
  • 举报
回复
来学习一下
lzy6204 2004-07-01
  • 打赏
  • 举报
回复
同意
yinweixian 2004-07-01
  • 打赏
  • 举报
回复
定义一个记录类型就可以了,返回记录中的值
飞天揽月 2004-07-01
  • 打赏
  • 举报
回复
同意楼上几位
creativepeter 2004-07-01
  • 打赏
  • 举报
回复
同意楼上的,不但可以用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修饰,表示在过程中不发生改变,这样做可以优化代码,当然你不使用也没有错了。
chinayk11 2004-07-01
  • 打赏
  • 举报
回复
可以用过程返回数组
procedure GetData(Aname:string;var array of variant);
huayuxing 2004-07-01
  • 打赏
  • 举报
回复
一种是用上面的结构来返回,一种用传址型参数来返回,
insert2003 2004-07-01
  • 打赏
  • 举报
回复
用记录类型
militant 2004-07-01
  • 打赏
  • 举报
回复
hehe
up 一下
linzhisong 2004-07-01
  • 打赏
  • 举报
回复
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;

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧