函数能否返回对象,而不是指针

Luckyfeeling 2002-04-22 12:35:51
现有一通用 获取记录集合函数
function GetRec(StrSql:string):Tadodataset;
var
rec1:Tadodataset;
begin
rec1:=TADODataSet.Create(nil);
rec1.Connection:=ADOConnection1;
rec1.CommandText:=strsql;
rec1.Open;
result:=rec1;
rec1.Close;
rec1.Free;
end;
在其它地方调用,返回的因为是个指向 rec1 的指针,因为 rec1 已经被释放,调用总是出错,请问我该如何正确的用函数返回 Tadodataset 记录集合
...全文
102 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liang_z 2002-04-22
  • 打赏
  • 举报
回复
对象是什么?
指针又是什么?
你没有弄清楚啊!
在你的例子中,
你可以将对象看成一块内存,
Result是一个指向这块内存的指针,
result:=rec1;
rec1.Close;等于result.Close;
rec1.Free;等于result.Free;
这样,你的函数返回后,
result不就变成空的了吗!


windindance 2002-04-22
  • 打赏
  • 举报
回复
你应该这样使用:
rec1:=TADODataSet.Create(self);
并且不要释放它
liang_z 2002-04-22
  • 打赏
  • 举报
回复
不要下面两句,没关系的!
rec1.Close;
rec1.Free;
你以后来Free也可以啊!
imchk6 2002-04-22
  • 打赏
  • 举报
回复
帮你去提提前吧.

我觉的你没有必要这样做吧,多用一个Tadodataset不就什么都解决了!

:)
nebulaly 2002-04-22
  • 打赏
  • 举报
回复
rec1.Close;
rec1.Free;
这两句去掉
C_Sharp 2002-04-22
  • 打赏
  • 举报
回复
Tadodataset 在调用的地方创建,在参数里传递一个var Tadodataset。
Luckyfeeling 2002-04-22
  • 打赏
  • 举报
回复
谢谢大家的热情帮助和参与,总结各位的看法,我认为:vb 中的函数可以以函数名称返回一个对象的拷贝,而dephi 的函数返回的是指针。
dephi 中最好不要通过函数返回对象,而是通过 var 参数来返回对象。
liang_z(千山一刀之忍者神龟) 的方法虽然可以,但假如我在一个过程里面
在 用
rec1:=GetRec(StrSql:string);
rec2:=GetRec(StrSql:string):
读取 rec1 的值则出错
读取 rec2 的值则正确
原因是 调用 rec2 时将 rec1 已经关闭了。

好了,如果大家没有别的高见,我就解分了!
TechnoFantasy 2002-04-22
  • 打赏
  • 举报
回复
rec1本身就是一个指针,在没有Create之前是nil,Create之后是一个指向一个TADODataSet实例的指针,你可以用 IntToStr(Integer(rec1))得到指针的整数值。
brallow 2002-04-22
  • 打赏
  • 举报
回复
对,对象就是指针,本质上并没有区别的,不管你怎么样得到的始终是指针

5,388

社区成员

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

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