请教一个简单的问题,关于参数的问题。

dust 2003-08-19 12:13:46
各位老大,
我想在函数开始记录一下信息,再退出后还原
执行这段代码后肯定出错。我不明白为什么我已经付给了你的对象,对原来对象的改变怎么会影响新的对象。谢谢
function TForm1.testobject(dbset: TAdoQuery): TAdoQuery;
var
temp: TAdoQuery ;
begin
temp:= TAdoQuery.Create(nil);
temp:=dbset;
dbset.Free;
showmessage(inttostr(temp.RecordCount )) ;
end;
...全文
45 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fansnaf 2003-08-19
  • 打赏
  • 举报
回复
对,揭帖吧,:)
dust 2003-08-19
  • 打赏
  • 举报
回复
这个问题主要是我对对象付值不太理解。
以及函数参数传递理解不够
DWGZ 2003-08-19
  • 打赏
  • 举报
回复
还有一个问题就是我传递进去的参数(dbset) 执行函数后改变了。我没有使用变参。为什么会改变?
因为你传递的是一个复制的指针, 它们都指向同样的地址
dust 2003-08-19
  • 打赏
  • 举报
回复
还有一个问题就是我传递进去的参数(dbset) 执行函数后改变了。我没有使用变参。为什么会改变?


我是新手。多多包含。。。
madyak 2003-08-19
  • 打赏
  • 举报
回复
function TForm1.testobject(dbset: TAdoQuery): TAdoQuery;
var
temp: TAdoQuery ;
begin
temp:= TAdoQuery.Create(nil);
temp.Assign(dbset);//这样试试看
dbset.Free;
showmessage(inttostr(temp.RecordCount )) ;
end;
fansnaf 2003-08-19
  • 打赏
  • 举报
回复
temp:=dbset;
这句有问题,
因为这里只是指针指向了原来的对象--dataset,
你释放了这个adoquery,那么你创建的
temp就找不到了,出错!
lxpbuaa 2003-08-19
  • 打赏
  • 举报
回复
temp不过是个指针,指向的实际对象是dbset。dbset.Free;将这个对象销毁了,所以showmessage这句出错。

function TForm1.testobject(dbset: TAdoQuery): TAdoQuery;
var
temp: TAdoQuery;
begin
temp:=dbset;
showmessage(inttostr(temp.RecordCount )) ; //或者直接showmessage(inttostr(dbset.RecordCount )) ;
end;
就可以了

————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
dust 2003-08-19
  • 打赏
  • 举报
回复
知道问题了,但是如何解决?

我使用复制指针,所以改变了原来参数,请问用什么方法,又传递了 对象参数,又不会改变原来的值,
请问如何copy 一个对象副本,而不是两个指针指向同一个地方。

5,386

社区成员

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

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