mainform就只是内存中的一个变量,而不是一个表单不可见的实例!反之,thisform.release语句则从根本
上释放了表单上所有的对象变量,从而在内存中完全清除了表单.
而在prg文件中与scx文件中用addobject()方法建立表单和控件的顺序是不一样的,在prg文件中是先
向表单添加控件再显示表单,表单上的控件继承了表单的visible属性,当表单实例化时控件也实例化;
而在scx文件使用addobject()方法是先显示表单,然后再向表单添加控件的,因此必须手工设置控件的
visible属性为Ture。
当然这样比较麻烦,干脆在mybut类库中手工建立一个Resultform表单类,在该表单类上添加一个命
令按钮cmdReturn和一个Grid1,设置命令按钮cmdReturn的caption属性为"返回",Click事件代码为
thisform.release,设置Grid1的RecordSourceType属性为1-别名,RecordSource属性为Tempview,这样就
不用在代码中手工输入thisformset.form1.cmdReturn1.visible=.t.语句,省事多了。
最终的程序代码如下:
*******************************************************
set database to databasename
if used("tempview")
rename view tempview to oldview
delete view oldview
endif
Create sql view tempview as &sqlstatement
=requery()
IF _TALLY = 0
#DEFINE MSG_LOC "没有找到符合条件的纪录!"
#DEFINE TITLE_LOC "没有找到纪录"
=MESSAGEBOX(MSG_LOC,64+0+0,TITLE_LOC)
ELSE
set Classlib to mybut additive
thisformset.addobject("form1","Resultform")
thisform.hide
thisformset.form1.show
Endif
********************************************************
运行程序,一切ok!终于实现了动态生成查询条件,动态显示结果。只要再用dbsetprop()语句设置视
图为可更新,就能对查询结果进行修改/更新了!这是我见到过的最完美的复合查询了!
就这么简单?没错,就这么简单!一个困扰数月的问题,研究的时候峰回路转,最终结果却是如此轻
松!这就是编程的艺术吧!
这个问题的解决,虽然走了许多弯路,但是也让我们了解了许多VFP的原理,难道不是很值得吗?!光
凭书本的知识,你永远也无法了解这些东西的。有人说:读三年的书,还不如写一个月的程序,不是吗?!
其他:
我在本文中省略了开头的动态生成sql语句的部分,具体的做法大家可以研究一下VFP自带的示例应用
程序solution中databases目录下的view/queries目录中的Interactively Bulid
| 对此文章发表了评论 |
