新手求教 在函数中创建对象

Brradish 2010-11-16 08:20:53
为了避便代码重复 搞了个函数

procedure DoSql(sql:string;DS: TADOQuery);
begin
DS := TADOQuery.Create(nil);
DS.Close;
DS.Connection := DBConnect;
DS.sql.Clear;
DS.sql.Add(sql);
DS.Open;
end;

调用时
var QueryTemp:TADOQuery;

try
DoSQL(sql,QueryTemp);
// QueryTemp.DoSomething;
finally
freeandnil(QueryTemp);
end;

可是报内存错误.... 求解~~~ Create不是在堆上分配内存么?为什么离开函数后还不可以访问了...
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaohuateng 2010-11-22
  • 打赏
  • 举报
回复
不明白你为啥还在调用时
var QueryTemp:TADOQuery;

函数里直接定义这样一个局部变量
引用时直接DoSQL(sql)就行了。
gzhhc 2010-11-20
  • 打赏
  • 举报
回复
学习了。
Brradish 2010-11-17
  • 打赏
  • 举报
回复
谢 本以为delphi的Class类型应该是引用传递的..... 不知道还得显式声明引用....
Oraclers 2010-11-16
  • 打赏
  • 举报
回复
你这个可以改成
procedure DoSQL(SQL:string;var DS:TADOQuery);
这样才是传参数地址,退出过程后才能调用。
或者:(最好是这样)
procedure DoSQL(SQL :string;DS:TADOQuery);
......

var QueryTemp :TADOQuery;
QueryTemp := TADOQuery.Create(nil);
try
DoSQL(SQL,QueryTemp);
......
finally
FreeAndNil(QueryTemp)
end;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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