使用了data Module把控件如ADOQuery等,使用起来如何避免冲突(50分)

  • 主题发起人 主题发起人 cowbird
  • 开始时间 开始时间
C

cowbird

Unregistered / Unconfirmed
GUEST, unregistred user!
我以前各自使用各自的ADOQuery,导致有好多的控件
现在把ADOQuery共用控件放在一个data Module的单元里,那么如何避免使用冲突呢?
比如我一个窗口打开还没有关掉,又开了一个怎么办?
 
将adoquery控件放在一个data module实现共用,不代表你只用一个控件就可以满足要求。
还需要对控件进行分析,以确定象adoquery这类控件的数目。

在使用之前,先尝试将控件关闭,然后再使用,这样可以保证不会有问题。
 
每次使用就应该这样做:
strsql:='select * from selrecord where intable="'+seltableTV.Selected.Text+'"';
With dm.DQ Do
Begin
Close;
SQL.Clear ;
SQL.Add(strsql);
ExecSQL;
Active:=true;
end;
 
一般是共有的话,养成使用之前先close,一定不会有冲突了:)
 
可以动态创建 adoquery,先创建,用完了就释放。就没有
冲突的事情了.
 
一般共用的情况是:在使用如ADOQUERY1的情况下,其它地方没有同时用ADOQUERY1
否则只有再增加一个控件才行,在共用时一定要先释放,则否下次再调用的时候也
调用上一次的执行语句所以:
with adoquery1 do
begin
close;
sql.clear;
sql.text:='................';
..................
...............
 
如果一个窗体在运行时可能有多个实例,建议把只在本窗体中使用的控件放在窗体中,
而不放在数据模块中
 
datamodule 不是用来避免太多的控件的,而是为了集中管理控件,你明白了没有?
我真高不懂,这算哪门子问题,如果只使用一个adoquery有什么必要使用datamodule控 件呢?
你告诉我?
 
看来多个实例同时运行,必须建立多个ADOQuery.否则单个ADOQuery必须及时的关掉,才能重复使用.没有其他办法了是吧??

这样的话,采纳ysai的意见,各实例中放置自身的控件,在数据模块中放有共性事件或控件(能及时关闭的).

给yitanhg回复:datamodule是集中管理控件的话,我觉得不如放在各窗体中直观.只有放
共用的控件和事件才合理.我当然是多处使用adoquery,放在datamodule中,是为了想用一个,
(不管它是否能及时的关闭),想问问有没有办法解决.

最后问个问题,一个数据库的应用软件,有必要提供可以同时打开两个以上的不同功能的窗体么??(冲突的起因)
 
for最后问题:一般不要, 但也有这种需求。
 
To :cowbird
最后一个问题很好笑,我也遇过。其实具体问题具体做,我个人不提倡什么一个窗体实现很多功能。
但有时例外,因为我曾做过一个窗体实现七个菜单的功能的。管理起来很容易,但也很容易出错。
顾此失彼,有时得不偿失。
另:DATA MODULE有好处,所以要灵活运用。建议:
一些公用控件(当然可以包括非数据控件,虽然它叫DATA MODULE)就放在那里,
一些在其它窗体上根本用不到的专用的控件就放在它的本身窗体里吧。
因为如果工程大了,在DATA MODULE上的控件多了,打开和修改的时候就会变得非常慢了。
所以不建议把所有的控件都放在DATA MODULE上。
当然可以做多个DATA MODULE,如果不是超大系统,我觉得这样做没必要。
不多说了,这只是我个人的看法。。。。。
 
后退
顶部