控件的初始化事件中能不能访问数据库? 我这边总是 AV. 具体情况如下所述:(50分)

  • 主题发起人 主题发起人 Sterntaler
  • 开始时间 开始时间
S

Sterntaler

Unregistered / Unconfirmed
GUEST, unregistred user!
从 TPanel 派生的一个控件, 如果在其构造方法里面访问数据库, 我试过 Query.Open,
Query.Locate,Query['Field'].AsString 等方法访问数据库, 但是都造成非法内存
访问(AV).
说明一下, 如果控件没有添加到组件面板, 动态生成的话没有这个问题, 在控件的其他
事件方法里面访问也没有问题. 只要没有在构造方法里面访问数据库. 请问这是什么
原因? 知道原因地说一声, 不胜感激.
 
我没有能搜索到相关的问题, 所以出来提问了. 大家给点建议也好, 谢谢了.
 
是不是说得不够清楚呢? 如果是的话, 提出来啦.
 
你在构造函数里面访问数据库,此时Query、数据库连接等是否建立?
如果你的控件比Query后Create,可能不会出问题,如果先于Query创建,则一定出错。
还有,你设计的时候放置控件时候好像就已经执行了构造函数,此时怎么办?
 
你添加一句判断:
if Query<>nil then ...,你会发觉没有执行你的构造函数。
 
谢谢, 问题已经解决了. 没有我说的那事. 我原来以为判断 ComponentState 就可以解决
问题了的, 没想到控件进入运行状态要比数据库的打开要早.

顺便提一下, 如果控件要用到数据模块里面的东西怎么办? 编译控件的时候隐含地将数据
模块编译进包里面了, 那就是说, 数据模块也要跟控件一块提供了, 有没有办法避免?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部