关于资源释放的问题请教

xinwen609 2015-05-10 11:27:33
1.在Fmainrs界面执行查询qry_yg,where 条件1
2.双击qry_yg的一条记录,打开rs_edit界面。
 rs_edit的formcreat事件中,写入
DBEdit2.DataSource := (Fmain.RzPageControl1.ActivePage.Controls[0] as TFmainrs).DataSource1;
DBEdit2.DataSource.DataSet := (Fmain.RzPageControl1.ActivePage.Controls[0] as TFmainrs).qry_yg;
DBEdit2.DataField := '姓名';
运行正确。
3.在Fmainrs界面执行查询qry_yg,where 条件2
这时提示:Acess violation at address 00403BFC.....。

问题:是不是因为rs_edit界面退出时,没有释放qry_yg?
如果需要释放qry_yg,应该在什么事件怎么写?
...全文
198 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinwen609 2015-05-27
  • 打赏
  • 举报
回复
多谢各位的热心帮助。找到问题的关键了。 formshow时,应将DBEdit2.DataField := '',先清空。
DelphixpeFan 2015-05-11
  • 打赏
  • 举报
回复
(Fmain.RzPageControl1.ActivePage.Controls[0] as TFmainrs).DataSource1; datasource 一般是全局的,猜测你的datasorce1前面一长串是可以不要的,datasorce的父类一般都是form,而你指向了一个控件,dataset也是一样的,我觉得你可以这样试下 DataSource1 := qry_yg; DBEdit2.DataSource := DataSource1; DBEdit2.DataField := '姓名';
lyhoo163 2015-05-11
  • 打赏
  • 举报
回复
引用 2 楼 xinwen609 的回复:
不是的。打开条件2,所筛选出来的所有字段,与条件1所筛选的字段是一致的。 我所所理解的是: 是不是因为formcreat时, DBEdit已经绑定了qry_yg, 主界面重新对qry_yg进行close,open操作,从而使数据出错了。 [quote=引用 1 楼 lyhoo163 的回复:] 一、formcreat事件中 DBEdit2.DataSource := (Fmain.RzPageControl1.ActivePage.Controls[0] as TFmainrs).DataSource1; DBEdit2.DataSource.DataSet := (Fmain.RzPageControl1.ActivePage.Controls[0] as TFmainrs).qry_yg; DBEdit2.DataField := '姓名'; 条件1 ,打开表有符合DBEdit2的字段。 二、当条件2中,打开的表,无符合DBEdit2的字段时,就会出错。 此时,要重新设置......
[/quote] 应该是这样,你将代码贴出来,看看。
天行归来 2015-05-10
  • 打赏
  • 举报
回复
问题:是不是因为rs_edit界面退出时,没有释放qry_yg? 如果需要释放qry_yg,应该在什么事件怎么写? rs_edit 退出后,不应该销毁 Fmainrs 上的qry_yg,否则 Fmainrs 上的 qry_yq被释放,造成对象访问失败。 一个原则是哪里创建哪里释放,也就是如果 qry_yg 是在Fmainrs 动态创建,那么在Fmainrs 关闭的时候释放。如果是设计的时候放上去的,则不需要释放,因为 Fmainrs 释放,子对象也跟着销毁。
xinwen609 2015-05-10
  • 打赏
  • 举报
回复
不是的。打开条件2,所筛选出来的所有字段,与条件1所筛选的字段是一致的。 我所所理解的是: 是不是因为formcreat时, DBEdit已经绑定了qry_yg, 主界面重新对qry_yg进行close,open操作,从而使数据出错了。
引用 1 楼 lyhoo163 的回复:
一、formcreat事件中 DBEdit2.DataSource := (Fmain.RzPageControl1.ActivePage.Controls[0] as TFmainrs).DataSource1; DBEdit2.DataSource.DataSet := (Fmain.RzPageControl1.ActivePage.Controls[0] as TFmainrs).qry_yg; DBEdit2.DataField := '姓名'; 条件1 ,打开表有符合DBEdit2的字段。 二、当条件2中,打开的表,无符合DBEdit2的字段时,就会出错。 此时,要重新设置......
lyhoo163 2015-05-10
  • 打赏
  • 举报
回复
一、formcreat事件中 DBEdit2.DataSource := (Fmain.RzPageControl1.ActivePage.Controls[0] as TFmainrs).DataSource1; DBEdit2.DataSource.DataSet := (Fmain.RzPageControl1.ActivePage.Controls[0] as TFmainrs).qry_yg; DBEdit2.DataField := '姓名'; 条件1 ,打开表有符合DBEdit2的字段。 二、当条件2中,打开的表,无符合DBEdit2的字段时,就会出错。 此时,要重新设置......

5,386

社区成员

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

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