窗体再create时dbgrid显示数据的更新问题(50分)

  • 主题发起人 主题发起人 trustme007
  • 开始时间 开始时间
T

trustme007

Unregistered / Unconfirmed
GUEST, unregistred user!
一个非主窗体中有一个adoquery,一个datasource,一个dbgrid
将他们连接起来,adoquery中有默认的sql语句select * from table1
这个窗体被主窗体create后,我通过一些按纽实现了查询功能查询出某些
字段显示在dbgrid中,关闭窗体,当我再次在主窗体中CREATE出这个窗体时
dbgrid中仍然还是上次查询出来的记录,我在form的onclose里加了action:=cafree
啊,可是为什么窗体好象并没有被释放,我试着在onclose里断开adoquery和datasource
datasourse和dbgrid的关联,在form的oncreate里再把他们连起来,可是都不是
刷新dbgrid也不行,究竟问题在哪里呢?
 
我也有过类似的遭遇,来听课了!
 
oncreate里面
adoquery.close;
adoquery.open看
 
你在关闭非主窗体时,先关闭adoquery这个数据集,也就是adoquery.close;
 
上面两位兄弟的方法我早就试过了,代码我加进去没有用
 
你用这样的代码试试:
try
form2 := tform2.create(nil);
form2.showmodal;
finally
freeandnil(form2);
end;
应该没有问题.
 
to xeen 这样和在form的onclose里加个action:=cafree
有什么区别呢,难道freeandnil释放得更加彻底,
我在formclose里把cafree那一句改成freeandnil试一下吧
 
是吗?那就怪了,你在Create时
adoquery.close;
adoquery.sql.clear;
adoquery.open;看看?
 
我在formcreate里加入adoquery1.close;然后open
难道他open的不是adoquery的默认sql语句?
 
试试在oncreate中重新构造sql语句,再打开
 
还不行吗?
你是不是用了什么第三方控件,我有一次用了 ehlib好像也出现了这种怪事.
 
我怀疑你把传给sql的参数保存在什么地方了,它并没有释放,当你第二次打开时,它又传进去了。
 
我没有用第三方控件
我现在在网吧,无法去试一下在formcreate里重新构造sql语句
不过我在想如果这样能行,为什么在formcreate里open不按默认的语句执行呢
 
在你的create事件中加入
select * from table1 不就行了么?
 
我是在QUERY的属性中设置SQL语句为查出所有记录
而按钮去清空SQL语句,重新添加,按照道理来说我
已经把SQL属性设为全部记录了,在窗体CREATE时应该
是按照这个来查询的啊,我想弄清楚这里面的机制
 
你的 窗体是怎么 创建的 呢?

你是不是没有 FREE 掉呢?
 
是create(self),然后showmodal这样创建并显示的
free好像并没有用,我测试了一下,这个被free掉的窗体并不为nil
 
theForm := nil
一切OK
 
后退
顶部