金桥科普  
设为首页 关于我们 邮箱登录
科普聚焦时代科技科普生活科学技术自然科学航空航天科技博览历史考古电脑IT
您现在的位置: 首页 >> 科普频道 >> 技巧实践 >> 文章详情
VFP查询系统实现技巧六则

四川新闻网 四川新闻网 2001-09-06

  用VFP6.0编写完整的应用程序时查询系统往往是不可缺少的重要部分。而开发一个优秀的查询系统需要很多的应用技巧。由于工作原因,笔者经常开发查询系统模块,现将个人编程中总结的一些技巧介绍给大家,希望对读者的应用开发有所帮助。 


  任务进度条的实现 


  在查询的过程中,如果数据较多,需要用户等待时,查询系统中应有进度条加以显示,才能使系统更加具有规范性。具体实现方法如下: 

  1.选择VFP的系统选单“工具”中“选项”条,弹出“选项”窗口,在窗口中点击“ActiveX控件”栏,添加任务进度栏控件Microsoft ProgressBar Control Version5.0(SP2)至ActiveX工具箱中。 

  2.选定表单控件工具栏中“ActiveX控件”,添加控件Microsoft ProgressBar Control Version6.0至查询的表单Form1中,并设置其属性Max值为1000。 

  3.将下列代码添加到数据查询程序代码之后: 

   for i=1 to 1000 

   for j=1 to 2000 

   j=j+1 

   endfor 

   thisform.olecontrol1.value=i 

   i=i+1 

   endfor 

   messagebox('数据查询完毕,OK!',0+64) 

   thisform.release 

   clear events 

  通过这样的设置,在查询时如果时间较长,查询进度条会为用户显示查询任务的运行情况。 


  应用宏命令实现组合查询 


  在组合查询中,需要查询的组合项通常很多,如果每项都使用不同的变量,编程会非常烦琐。笔者使用宏命令轻松实现查询组合条件,具体实现的方法是在查询按钮里加入如下代码: 

  LOCAL cFilter,nCnt,cCondition 

  FOR nCnt = 1 to THISFORM.ControlCount 

   IF TYPE('THISFORM.Controls(nCnt).controlSource') <> "U" THEN 

   IF !EMPTY(THISFORM.Controls(nCnt).ControlSource) AND ; 

   TYPE('THISFORM.Controls(nCnt).value') <> "U" THEN cCondition=THIS.Parent.parseCondition(THISFORM.Controls(nCnt).value,THISFORM.Controls(nCnt).controlSource) 

   IF !EMPTY(cCondition) THEN 

   cFilter = cFilter + " AND " + cCondition 

   ENDIF 

   ENDIF 

   ENDIF 

  ENDFOR 

  通过这样的设置,虽然有多个查询条件,但查询的组合条件为cFilter,以后的应用只要对cFilter进行处理即可。 


  删除查询表中的空记录 


  使用类查询(_dataquery.vcx)时,会在待查询表中的最后自动插入一条空记录,而在实际的GRID表格显示中,我们是不希望将空记录显示出来的。下面是解决此问题的详细步骤: 

  1.在主程序或Form对象的Load事件输入以下代码: 

  SET DELETE ON 

  2.在查询结束代码后输入以下代码: 

  Thisform.Refresh 

  &&&&刷新表单 

  go bottom 

  delete next 1    

  &&&&因为当前表被添加了一个空记录,在实际应用中应删除掉 

  Thisform.Grid1.Column1.Setfocus 

  go top 

  Thisform.grid1.refresh    

  &&&&删除一条记录后,应及时地刷新GRID表 


  实现中英文自动切换 


  在用VFP6.0开发查询系统时,文本框对象和组合框对象应用得较多,在文本框中进行中英文的输入时,来回切换非常烦琐,所以笔者借助自定义子类,来实现中英文输入的自动切换。具体实现的步骤如下: 

  1.点击VFP6系统选单栏“文件→新建→类”,启动“新类”对话框,填入类名为gsTextBox,并设置父类为TextBox,在“存储于”栏处输入存储的位置和名称,按“确定”键进入类设计器画面。 

  2.新增一个属性,来作为对象是否启动中文输入法的控制码。通过系统选单栏“类→新建属性...”,启动“新建属性”对话框,设置一些属性,其中可视性设为public。 

  3.最后设置GotFocus与LostFocus事件过程。Gotfocus Event事件过程如下: 

  If thischinese 

  &&&&中英文选择,thischinese为逻辑量 

   =imestatus(1) 

   else 

   =imestatus(0) 

   endif 

   Lostfocus Event事件过程如下: 

   =imestatus(0) 

  至此,类已经定义完成,以后只要在设计表单时,通过表单控件“工具栏→查看类→添加...”把自定义类加入,并且设置“中英文选择”属性,即可实现中英文输入的自动切换。 


  实现整条记录突出显示 


  在用VFP设计一个查询应用系统时,信息的浏览是相当重要的功能之一,通常采用的实现方法是用Grid对象来显示数据信息,但在使用过程中却存在一些不足,就是当使用者在记录之间移动时,只有获得焦点的那条记录的某一字段可以以不同于Grid背景的颜色显示,很不醒目。 

  笔者利用Grid对象,成功实现了当数据记录移动时,整条记录均用同一种颜色突出显示,即当数据记录移动时,用颜色动态变化显示相对光标所在的位置,设计步骤如下: 

  首先定义一个Grid对象,并设置好其属性,然后在其AfterRowColChange事件过程中添加如下代码: 

  LPARAMETERS nColIndex 

  this.setall("dynamicbackcolor","iif(this.activerow〈〉recn(),rgb(255,255,255),rgb(0,0,255))","column") 

  利用以上代码,我们就能达到当数据记录移动时,其相对的Row显示动态颜色变化。 

  在上面的设计中,我们首先使用了SetAll() 方法设定Grid中的Column层次的 DynamicBackColor(动态背景颜色属性),然后在第二个参数中使用了Grid 对象的ActiveRow反映相对的行数,若不等于记录编号时,则通过 RGB(255,255,255) 送出白色背景,若相对行等于记录编号时,则通过 RGB(0,0,255)送出绿色背景色,而该颜色也可自行设定。 


  用Grid模拟Browse窗口 


  可以将Grid结合在Form对象中,模拟成一个Browse命令窗口,可以自由调整Form大小,而Grid对象也会自动调整大小。实现方法如下: 

  1.首先设定一个Form对象,该对象必须保留其BorderStyle为“3-可调边框”,这样可自由调整大小的边线属性,同时设定Resize事件程序如下: 

  Thisform.Grid1.Width=this.width 

  Thisform.Grid1.Height=this. Height 

  2.设计一个Grid对象于Form对象中,并设定其属性如下: 

  Width=Thisform.Width 

  Height=Thisform.Height 

  RecordSource设为目前“数据环境”中所设定的工作区别名; 

  Top与Left均设为0,表示该对象左上端坐标为0,0。 

  这样,已经设定好的Grid对象和Browse窗口一样,当对Form对象进行大小调整时,对象的高度与宽度就可以随之调整。
  发表评论 写信给编辑 关闭窗口
同栏目内容
· 让你的电脑启动画面绚起来 2007-09-12
· 小技巧帮大忙 极点五笔 2007-09-05
· 如何提高迅雷的下载速度? 2007-09-03
· Vista小技巧 消除红眼 2007-09-03
· 千千静听实用小功能 2007-08-29
· Windows 自动登陆的简单方法 2007-08-20
相关内容
近期主推
我国首架自主产权飞机完成
·我国首架自主产权飞机完成
·机器人版"千手观音"惊艳亮相
·西藏发现青藏高原最大冰川群
·中日: "月亮女神"携手"嫦娥"
·行星大碰撞砸死恐龙催生人类
·美研制会飞汽车定价9万美元
近期热门
科学家解开中子星爆发之谜
·科学家解开中子星爆发之谜
·英海域惊现大龙虾为普通龙虾5倍
·新物种金蛙体表有剧毒
·我国嫦娥工程计划测量月球
·精神病药物可治多种癌症
·视觉震撼:来自海底的精灵
近期焦点
美国发现极其罕见的白化银鲛(图)
·美国发现极其罕见的白化银鲛(图)
·美国展出罕见连体双胎双头龟
·波罗的海发现罕见短吻真海豚
·能帮你做大扫除的机器人[组图]
·法老墓3000年前坚果保存完好
·广西发现罕见溶洞钟乳石有30万年
金桥科普是一个公益性栏目,内容由作者提供或摘自互联网,其目的是向广大网民普及科学技术知识。如果您发现本网站转载或摘编了您拥有著作权的作品,请通知我们(电话:023-63659911),我们立即删除。
关于我们 | 网站地图 | 用户注册 | 广告客户 | 招聘信息 | 业务信息
Copyright@2006-2009 JQInfo.com,WONDER. All Rights Reserved
重庆科技咨询中心.重庆网得信息技术有限公司.版权所有
Email:webmaster@jqinfo.com
重庆数据通信局提供网络带宽. 渝ICP备05002327号