回复楼主:谈一点个人看法。
1、主表单中执行子表单时,同实例过程中,各个并行子表单名称不能重名!否则界面会混乱,楼主可试试就知道了。
2、用 do 子表单时,要用‘参数控制’打开。否则,当多次点击打开时,关闭子表单需点击多次才关闭。
这必须要求有条件打开。 比如:
if na1=0
na1=1
do form 子表单1 with na1 to nb1
endif
用 nb1返回 0 值替换na1的值等。当然,也可以不用 to nb1,关闭表单时设 na1=0
3、各表单必须设置其 datasession=2 为私有。这样,即便一个表单中,使用了 close all,也无妨任何表单的
grid 数据环境而正常显示。例如,打开子表单的数据环境,在dataenvironment 的 beforeopentable 中,
可以写下列简单测试的语句:(与打开实例前,先写 prg 预处理程序段,其形式或效果是一样的)
close all
set safety off
set talk off,
.....
open data 数据库
nhd=sqlconnect('连接名',.T.)
nd1=sqlexec(nhd,'select * from dbo.表1','b1')
nd2=sqlexec(nhd,'select * from dbo.表2','b2')
nqq=sqldisconnect(nhd)
close database && 数据库已经关了,但生成的临时表并没有关。
sele b1
sele b2
* 打开 dbc 数据库及其表时情况相同。及时关闭数据库,避免共享冲突。
4、如果每个子表单是一些较大的程序块,启动实例可能较慢。此时可考虑多实例模式的弱点。最好用公共类
的模式,启动一个一个的独立表单或表单集。这就是多进程模式。一个表单的多个实例,仍然只是‘一个’进程。
表面上我们可以同时打开若干窗口,实现了多界面,但是,由于他们都在一个公共参数环境内,需要对各个
环节的参数都需严格控制,才能避免众多的干扰因素。而公共类则宽松得多。不但实现多界面同时操作,而且‘安全稳定’是最大的优点。有人说多进程占用内存大,但对于目前的电脑来说,是戳戳有余的。
5、实现多界面或多进程的同时操作,还有一种方法,就是使用多项目产生的多个dll,或 exe。可以用打开类的方式,或
用API调用他们。由于多进程之间的数据是互不联系的,过强的独立性,多界面操作之间互不干扰,固然是个优点,
但是,却对相互之间的数据传递造成了困难,这就是一大缺点。但是,在此,我们要感谢VFP 了!因为他有一个
非常好的数据传递工具--- dbf 文件。利用我们再熟悉不过的 dbf,可以将各个独立进程中产生的参数,数据,
需要传递的,都放进 dbf 中,让其他的进程随时调用。又简单可靠,又容易实现。
6、如何在多界面操作中避免自由表重名?个人体会,可以用规范路径的方法。即:每一个子程序或实例中,所使用的路径都是编了号的,并且都以参数形式使用。这样不可能存在各实例间的表的冲突或混肴。多界面操作,要注意共享数据库
的及时刷新。因为是商业订单的开写,以及查询等,所要求即时无误的新数据情况不是太高。但是,也尽量考虑,
在必要的步骤中先获取最新数据,用共享库首先生成临时表,立刻关闭共享库。开完一张订单,用临时表刷新数据库。(仅供参考)