《vfp初级教程.docx》由会员分享,可在线阅读,更多相关《vfp初级教程.docx(26页珍藏版)》请在三一办公上搜索。
1、vfp初级教程第一课 开场白 很简单,只讲两个问题:一、项目管理器;二、数据库和表的区别。 一、在开发一个软件项目的过程中往往会产生大量的各种文件,有时开发者自己都不知道有些什么文件了,因此从VISUAL FOXPRO开始引入了项目管理器,以便更好地管理这些文件。项目管理器由两个文件组成,扩展名分别是“PJX”和“PJT”。 二、学过FOX的人都知道数据库是什么,就是有字段、记录的一个二维表,也就是那个DBF文件,可是到了VISUAL FOXPRO 3.0,这数据库就不叫数据库了,它干脆就叫“表”,英文叫“TABLE”。而数据库是包含有多个表的文件,扩展名是“DBC”,也就是数据库的库,引入D
2、BC文件的一个主要目的是为了对表能够很好地分类管理。 而不包含在数据库中的表,叫做自由表,其使用方法与原来的数据库基本相同。 第二课 见识一下面向对象的编程 我们先来编一个幸运7游戏机程序,也可以叫做一个游戏软件,亲身感受一下面向对象编程是怎么回事。也许您已经有了面向过程的编程经验,那么在这里您会感到面向对象编程真是一件很享受的事情。如果您没有面向过程的编程经验,那太好了,您永远都不会陷入一大堆复杂的代码中找不着北,而能在轻松之中便编出具有专业水准的程序。 言归正传,前面讲过编一个软件会产生很多文件,如果只是编一个简单的软件,也可能只有一个文件,但不管多少,我们首先要在硬盘上为这个软件建一个目
3、录,然后在编程的过程中,将产生的有关文件全部放在这个目录中以便于管理。 目录建好后启动FOXPRO 5.0,启动后将看到图1。 开始编软件之前先说明一下这是一个什么软件,它是一个类似赌博的游戏机,图2。 按下开始按钮后,上面的三个窗口就会出现三个随机数,如果其中有“7”则赢,否则为输。 现在开始正式编程,按第一课讲的首先要建一个项目管理器,建立的方法是调用菜单中的“文件”下的“新建”命令,或按工具栏上的“新建”按钮,接着会出现图3。 按新建文件,接着在下面的窗口中输入项目管理器的文件名: 这样就做好了文本框Text1,用来在软件中显示第一个随机数。如觉得位置不理想,可用鼠标按住它,将其移到合适
4、的位置,如感到大小不合适,可用鼠标按住文本框四周的8个黑点中的任一个,上下左右拉动来改变其大小。 接下来设置文本框的其它属性,如字体大小,用鼠标按“属性窗口”按钮,然后在属性窗口中点“布局”,再按上下滚动条找到“FontSize”属性,即“字体尺寸”属性,如图11。 按上面设置框的向下箭头,将字体设为48,如图12, 文本框变为如图13所示,显示的字体变大了。 另一个需要设置的属性是“水平对齐方式”,在布局中找到“Alignment”属性,在第一行,将其设为“2中间”,方法与设字体大小是差不多的,想必聪明的您不用我给图示也能做到了。 这样第一个文本框便设置好了,按同样方法做出第2、3个文本框,
5、如图14。这里要注意一点,在设置哪个文本框时,一定要选中所要设的对象,即能看到其周围有8个黑点,如没有,需用鼠标点它一下,今后设置其它的对象时也是一样。 下一步制做显示输、赢的文本标签,调出工具栏,按标签按钮方法做出标签,如图15。 ,按制做文本框类似的设置其标题,调出属性窗口,在布局中找到“Caption”属性,即“标题”属性,在设置框中输入“赢”,然后回车,结果如图16。 与文本框相同的方法设置字体大小为36,如图17。 接着将这个标签设为看不见,因为要赢了以后才把它显示出来,所以事先应是看不见的,方法是在布局中找到“Visible”属性,即“可见”属性,其隐含为“真”,即“T”,也就是能
6、看见,将其设为假,即“F”,如图18,那么程序一旦运行起来,它就看不见了,当然在设计程序时它还是看得见的。至于想知道赢了后怎样让它显示出来,那您接着往下看。 然后按同样方法制做“输”字,自然也要设为看不见,否则您就只输不赢了,做好后如图19。 接下来制做按钮,按下控件工具栏上的“命令按钮”,在表单上以制做文本框的同样方法做出第一个按钮,如图20, 然后设置其标题为“开始”,方法同设置标签的标题,设好后如图21。之后如法炮制做出“退出”按钮。 最后再给这个表单也设个标题,用鼠标点一下表单“Form1”的空白地方,不要点其中的控件,如文本框、按钮等,然后如前一样设置其“Caption”属性为“幸运
7、7游戏机”,做好后如图22。 到此为止,我们这个软件的界面就全部做好了。怎么样,不难吧? 下面要做的事情就是为按钮设置动作程序,也就是当按钮被按下这一事件发生后电脑要做些什么事,这就要为按钮的相应动作编一些代码,先来编“退出”按钮,因为它比较简单。 一个按钮,或者说一个对象,可以有很多动作,换句话说可以有很多事件发生在它身上,但对于已经使用的对象来说,可能只有某一个或几个动作有用。 对于按钮来说最常发生的事件就是被鼠标左键按动,我们这个软件中按钮所发生的事件也就是这个,对“退出”按钮来说,就是它在被按动后程序要退出,现在我们就来编完成这一任务的代码。 方法是:先用鼠标点一下“退出”按钮,使其被
8、选中,这样后面编的代码才是它的,否则就可能编到别的对象中去了,这样就达不到要求。 在属性窗口中选择“方法程序”,然后在其中找到“Click Event”,即“按动事件”,如图23。 双击“Click Event”,出现编程窗口,如图24,注意,其中的对象窗口中是“command2”,即退出按钮的名称,过程窗口中显示的是“Click”,即现在所编的程序是针对“按动”事件的。如感到属性窗口挡住了编程窗口,可将其关闭。 这里的程序只有一句话: thisform.release 意思是“本表单.释放”,也就是将这个表单关闭,这样整个软件也就运行结束了。程序写好后如图25,然后选择菜单上的“文件”下面的
9、“关闭”命令。 就这么简单?就这么简单! “退出”按钮编好后就要编“开始”按钮,这个按钮会稍微复杂一点,同样先按前面的方法进入程序窗口,但这次应是“Command1”的“Click”事件。代码如图26。 其中: if thisform.text1.value=7 .or. ; thisform.text2.value=7 .or. ; thisform.text3.value=7 是一条语句,由于一行写出来太长,不易读,故将其分为三行,除最后一行外,前面每行都以分号结尾,这样系统就知道把它们看做是一行来处理。另外“or”两边各有一个点,不能少。 程序中所有的命令、运算符号,如等号、分号、点号等
10、,都必须是半角字符。 每行语句后面,从“&”开始的文字是用于对程序进行解释和说明的,不会影响程序的运行,有也可,没有也可,但如果有的话,前面一定要以“&”开头,并与命令语句空开一格以上。 与“退出”按钮一样,“开始”按钮的程序写好后,关闭程序设计窗口,这样整个程序就编好了。 程序编好后,先按一下表单设计器窗口,再按菜单上“文件”下的“保存”命令,即将编好的内容保存到磁盘上,接着按菜单上“文件”下的“关闭”命令,这样整个软件就编完了。如果没有先按一下表单设计器,即没有将表单设计器的窗口激活,可能造成关闭了其它的窗口。表单设计关闭后可看到如图27情况。 这时先用鼠标点一下“xy7”表单,使其反白,
11、然后按项目管理器上的“运行(U)”,如果程序没有错的话,软件便能正常运行起来。看看您的手气怎样,能不能第一次就赢,我编好这个程序后第一次按下就出了“7”,手气真不错。 如果有错误,会出现类似图28的显示,这时按“取消”,然后按“退出”退出软件,如果“退出”按钮不起作用,则按窗口右上角的管理器中按修改进入表单设计器,查出错误的地方,改正即可。 按钮来关闭。之后在项目退出表单设计器后,按“文件”下的“退出”命令,便可退出FoxPro系统。如果没有打开过其它的项目管理器,下次启动FoxPro系统后,该项目管理器会自动打开,如没有打开,可按“文件”下的“打开”命令,或按钮,找到所要的目录和项目管理器文
12、件打开即可。有时打开可能看不到表单名,看到的是如图29所示的情况,这时只要按表单前面的“+”号将其变为“-”号,就可看到所有的表单了。 面向对象的编程很容易吧,希望您看了我们这一课后已有了充足的信心来学好VFP。有什么问题或对我们的课程有什么意见,给我Mail:)。 第三课 vfp的对象、属性、事件、方法 经过上一课我们已经对对象、属性、事件有了初步认识,这一课我们再做进一步讲解。 对象(object):就是我们软件中所看到表单、文本框、按钮、标签等等东西,一个软件的外观主要也就是由这些东西组成,那么我们要编软件就应该掌握各种对象的使用方法。 可放在表单内的对象,如按钮、文本框等也常常被叫作控
13、件,我们在后面的课程中也经常会用到这个词。 所谓面向对象的编程,就是我们在编程的过程中是看着这些东西来编程,而不是用一大堆的语言代码来编出这些东西,因此面向对象的编程非常直观,在编的过程中就能看见程序运行起来的样子。 另外由于不需用语言来构造这些对象,只是象画图一样将它们画出来,其大小及位置也不须用精确的数字来表示,你喜欢画多大就画多大,您无须知道诸如长是100、宽是80,这样使得编程变得非常简单。 属性(property):就是对象的性质,如长、宽、放的位置、颜色、标题、字体大小等等。为了达到我们所编软件的目的,也为了使软件运行的时候各种界面看起来舒服,我们必须在设计软件时对每个对象的有关属
14、性做适当的设置。所谓有关,就是对于一个对象来说,在一个软件中只有部分与这个软件有关的属性需要设置,而大部分可能不需要设置,只需使用它们隐含的设置就行了,而同一种对象在另一个地方,可能需要设置的属性又不同了。 对于属性的设置,有些只需用鼠标做适当的拖动即可,如长、宽、放的位置等,当然它们也可以在属性窗口中设置,另一些则必须在属性窗口中进行设置,如字体、颜色、标题等。 事件(event):就是可能会发生在对象上的事情,也可以说我们对对象所做的操作,如按钮被按动、对象被拖动、被改变大小、被鼠标左键双击等等。在一个软件中,总会有一些对象在运行时会被我们操作,当然我们不是平白无故去操作一个对象,总是希望
15、这个对象在被我们操作后能做出我们所期望的反应,如退出按钮在被按动后,我们就希望它使软件结束运行。 而这一反映即使是同一种对象在不同的软件中,或在同一个软件中的不同地方,我们所需要的反映都是不同的,比如同样是按钮,“开始”和“退出”在按下后所产生的效果不同。 为了使得对象在某一事件发生时能够做出所需要的反应,我们就必须针对这一事件编出相应的程序代码来完成我们的目标。如一个对象的某个事件被编入了相应的代码,那么软件运行时,当这一事件发生,相应的程序段就被激活,并开始执行,如这一事件不发生,则这段程序就不会运行。 而没有编有代码的事件,即使发生也不会有任何反应。 方法(method):也叫“方法程序
16、”。前面三个概念在上一课已接触过了,“方法”则是个新概念,它是指对象所固有完成某种任务的功能,可由我们在需要的时候调用。 “方法”与“事件”有相似之处,都是为了完成某个任务,但同一个事件可完成不同任务,取决于您所编的代码是怎样的,而方法则是固定的,任何时候调用都是完成同一个任务,所以其中的代码也不需要我们编了,FOXPRO系统已为我们编好,只需在必要的时候调用即可。 比如:文本框可以用以显示文字,也可以输入文字,假如一个表单上有三个文本框,那么我们打字的时候,字进入哪个框呢?这就要看当前的焦点在哪个框上,一般我们可以用鼠标点一下所要的框,即将焦点放到了这个框上,有时我们会让软件自动地将焦点放在
17、某个框上,这时就要调用“设置焦点”方法(setfocus),例如我们要把焦点放到第二个文本框上,调用的方法如下: text2.setfocus 至于它是怎么将焦点放上去的,也就是说具体放的程序是怎么编的,我们不用知道,只要能达到的目的就行。 当然不但是文本框,其它的对象也都有此方法,调用的一般语法是: 对象名称.setfocus 举一个实例来说明:当我们的幸运7游戏软件启动后,我们会看到在第一个文本框text1中有一个光标在闪动,也就是此时焦点在text1上,但我们并不需要在其中输入文字,因此有个光标在闪动看起来很不舒服,此时需要的是按“开始”按钮,所以焦点应在“开始”按钮上,因此我们应该在整
18、个表单启动的时候将焦点设到此按钮上。 当我们启动一个表单的时候,该表单的“激活”事件(activate)就会发生,但由于一般情况下这一事件中没有编入代码,所以即使发生我们也感觉不出来。那么现在我们就要借用这个事件再去调用setfocus方法,便可达到我们目的。具体做法是这样: 打开xy7项目管理器,找到xy7表单,按“编辑”进入表单设计器,调出属性窗口,看一下窗口上面的对象选择窗中是否是“form1”,如图1,如不是则选择到“form1”。 选择“方法程序”,在第一行找到“activate event”事件,如图2, 双击此事件进入程序编辑窗口,输入下面代码: mand1.setfocus 意
19、思是“本表单.command1对象.设置焦点”,command1即是“开始”按钮的名称。 输入完程序后,存盘、退出。这样一旦软件开始运行,表单被启动该表单的“激活”事件发生其中的程序开始执行将焦点设到command1即开始按钮,焦点设在上面后会看到有一个虚线框住按钮标题,这时text1中就没有光标在闪动了。 还不赶快试一下! 第四课 vfp常用的对象、属性、事件、方法 本课介绍一些常用的对象及其属性、事件、方法,掌握了这些知识以后,便可编一些简单实用的软件了。 对象(object): 表单(form) 标签(label) 命令按钮(commandbutton) 表格(grid) 文本框(tex
20、t) 属性(property): 标题(caption) 宽度(width) 值(value) 只读(readonly) 左起始位(left) 高度(hight) 文本对齐(alignment) 可见(visible) 上起始位(top) 控制源(controlsource) 名称(name) 事件(event): 单击(click) 初始化(init) 方法(methord): 设置焦点(setfocus) 刷新(refresh) 释放(release) 第五课 vfp常用编程命令及常用函数 注:在语法中如用方括号“ ”括起来的词句,表示可以不用。 常用命令 假设(if.endif) 分支(
21、do case.endcase) 调用表单(do form) 返回调用程序(return) 结束程序(cancel) 开关命令执行状态(set talk on/off) 循环(do while.enddo) 赋值(store.to) 调用子程序(do) 启动事件处理(read events) 清除事件处理(clear events) 常用函数 数值转换字符(str) 取年份(year) 取整(int) 记录号(recno) 表结尾(eof) 消除前导空格(ltrim) 找到记录(found) 取天日(day) 字符转换数值(val) 取月份(month) 四舍五入(round) 记录数(rec
22、count) 表开头(bof) 消除后续空格(trim) 删除标记(delete) 取系统日期(date) 第六课 编一个完整的软件 其实这个标题说的不太严密,因为任何一个能够正常执行的软件都可称之为完整的软件,而我们这里的意思是:一个有菜单、有数据库、各种输入输出、打印等较完整功能的软件。 那么编个什么软件呢?我们就编个人事管理软件吧。当然为了简便起见,这软件中的人事档案是很不完全,但完全可以说明软件编制的整个过程。 第一步:在硬盘上建一个目录,如d:rsgl。 第二步:启动foxpro系统,建一个项目管理器,存在上面的目录里,就如同在第二课中一样,管理器的名称也叫“rsgl”。 第三步:做
23、一个小小的系统分析。很多人喜欢拿到软件马上就开始编,这种习惯很不好,因为我们必须首先搞清楚这个软件有些什么功能、需要些什么表、有什么报表需要打印等等,这样才能使整个软件开发的过程比较顺利,否则会给后面的软件开发、修改、维护等带来无穷后患,严重时可能导致开发失败。因此我们不管开发什么软件,都应该先做系统分析,即使简单做一下也比不做好,要知道“磨刀不误砍柴功”。 第四步:编制菜单。 第五步:编制数据库及表。 第六步:编制各功能模块。 第七步:编制打印报表。 注意: 1、当您第一次打开源代码中的项目管理器时,如果其所在的目录不是“c:rsgl”,系统会问您“项目已移动,设置为其新目录”,应回答“是”
24、。 2、如果目录改变了,第一次运行程序前,应将菜单初始化代码中的“set default to c:rsgl”语句中的目录改为您的新目录,否则程序运行会出错。 第七课 编程中的一些小技巧 一、 复制 我们在编程会发现一个软件中有许多代码是重复,我们可以不用重复地写,而可以使用菜单中的“复制”、“粘贴”等命令来复制重复的内容,这一点想必大家都会想到。 但有一点可能有的人没有想到,即表单中的控件也是能复制的,而且可以一次复制多个控件。比如我们在制做人事档案的录入表单时,我们做好第一个标签和文本框,接着做姓名的标签和文本框时,就可以采用复制的办法。 用鼠标同时选择编号的标签和文本框,方法是用鼠标画一
25、框将以上两个控件框住,框住每个控件的一部分也可以,这样我们可以看到每个控件四周都有六个黑点,表示它们都被选择了。然后与复制文字一样调用菜单上的“复制”命令或工具栏上相应按钮,然后再用鼠标按“粘贴”,就会出现两个同样的控件,用鼠标把它们移到适当的位置,再将caption、controlsource以及大小等属性做相应改动即可。 注意控件的name属性在粘贴时已自动做了改动,比如原来的文本框叫text1,复制出来的文本框会自动叫text2,在一个表单中是不允许出现两个同名的控件,系统会自动遵守这一点,故我们可以不用去修改name了。当然如果您喜欢的话,您可以把它改为一个易记的名称。 另外在复制控件
26、时不光属性会被复制,其中的事件代码也会被复制。还有我们可以把一个表单中的控件复制到另一个或更多的表单中。比如很多时候退出或取消按钮都是一样的,其中的click事件中都是“thisform.release”语句,我们就可以把一个表单中的按钮复制到另一个表单中,有时可能会要改一下caption或在click事件中加减一两条语句。还有向上移动记录和向下移动记录的按钮,其中的事件程序也都差不多,也可以复制,然后将不同的地方修改一下。 这里还有个技巧,将鼠标放在要复制的地方,按右键,选择弹出菜单中的“粘贴”,控件就会被复制在鼠标的地方,虽然还不够精确,只要稍微动一下就行了,不用移那么远。 二、 缩格及空
27、行 一些网友可能发现我们的程序中有的语句开头会向里缩几格,这是为什么呢,又有什么规律吗? 这是为了使程序易于阅读,我们知道VFP中有很多语句是成对的,比如if和endif、do while和enddo,我们为了把成对语句之间的语句和之外的语句区别开来以利于程序的阅读和理解,有经验的程序员往往都是把成对语句之间的语句往里缩。如果不这样做,在看程序和修改程序时很容易出错,特别是在成对语句里面又套成对语句的情况,如下面的程序: if a=1 b=a+c if b=3 c=b+a if c=5 d=9 endif d=c+a if c=3 d=c+b endif endif c=4 endif 我们很
28、难看清哪个if和哪个endif配对,这就给修改程序带来了很大麻烦,如果写成如下形式则一目了然: if a=1 b=a+c if b=3 c=b+a if c=5 d=9 endif d=c+a if c=3 d=c+b endif endif c=4 endif 这就是缩格的好处,希望大家今后在编程序时都要采用缩格,虽然在编程序时要多打几个空格,但会给以后修改程序带来很大方便。 但也有不方便的时候,比如我们修改程序时要把一大段程序套在一对if和endif中,那么要挨个将这一大段程序往里移,那也是一件很烦人的事。 不过不用怕,VFP已为我们准备了解决这一问题的功能。在程序中的任意位置按鼠标右键,
29、在弹出的菜单中选择“修饰”,在弹出的设置框中直接按运行即可完成对程序的缩格修饰,并且系统还会对程序做适当的大小写处理。 但我不喜欢直接按运行,而喜欢做一些设置,具体设置如下:将关键字和符号全部选择为小写字母,即不做大小写处理,缩进类型选择空格,这是为了调整缩进的空格数,然后把下面的空格调为2。 以上设置纯属个人喜好,并非必要! 另外我们在编程时还应该在适当的地方空一行,那么什么叫适当的地方呢?这就有点象我们写文章分段,一段相对完整的意思做为一段,我们也把一段相对完整功能的程序做为一段,一段完了可以空上一行,也是便于程序的阅读。当然这里的“相对完整”相对不同的人来说可能不一样,我们完全可以根据自
30、己的习惯,不过给个建议就是既不要太少,也不要太多,初学者可根据我们上一课中的程序去揣摸。 三、 在程序中插入对象名称 我们在编面向对象的程序时,经常要引用一个对象的名称,而且要用这个对象的全名,比如:thisform.text1,老是这样写也是个叫人打嗑睡的事,有没有简便的办法?有! 在要插入一个对象引用名称的位置单击鼠标右键,在弹出的菜单中选择“对象列表”,在出现的对象列表中选择所要的对象,虽然这里看到的不是它们的全名,但按了插入之后.。 插入的名称会以大写字母开头,如不喜欢,可按我上面的设置对整个程序修饰一下。 四、 精确调整对象位置 我们在编程序时一定发现当移动一个控件时它是跳着走的,而
31、且是按照表单上的虚线格跳,这主要是为了我们的控件都能对整齐。但有时候我们不需要对整齐,而要做一些小小的调整,即不按格跳,怎么办呢? 选择菜单上的“格式”,再选择其中的“对齐格线”,将其左边的钩去掉,然后您再移一下控件看,想到哪就到哪。如要恢复原来的状态,再把钩加上。 五、 为文件写说明 当开发一个较大的软件时,可以想象在项目管理器中会有很多的文件,当多到一定程度可能我们自己都搞不清这些文件是干什么的了,为了防止这一点,我们应该为每个文件写上说明,使我们随时知道每个文件的作用。 用鼠标右键单击一个文件名,在弹出的菜单中选择编辑说明,在出现的表单中写入该文件的说明文字,确定。之后当我们用鼠标选中这
32、个文件时,相应的说明就会显示在项目管理器的底部。 六、 重命名文件 在编软件时免不了有时要改文件名,方法是:在项目管理器中用鼠标右键单击一个文件名,在弹出的菜单中选择“重命名”,往下您就看着办吧。 七、修改数据表时调整字段位置 当我们需要调整数据表中的字段位置,可在表设计器中很方便地移动。进入表设计器,用鼠标按住字段移动钮,如图1,然后上下移动到所需的位置即可。 八、调整表格中各列的位置 1. 在表格生成器中移动,用鼠标按住选定字段中的字段移动钮上下移动,如图2,与上面移动数据表的字段一样。 2. 3. 4. 在表单中移动,在属性窗口中选择表格的任一列,然后在表格上抓住要移动列的表头左右移动到
33、所需位置。 在程序运行时移动,直接抓住要移动列的表头左右移动到所需位置。 九、设置控件的tabindex位置 一般说来,进入一个表单后,我们希望光标停在第一个输入位置,按回车则光标依次向后跳,但有时我们可能会发现,光标不依这个顺序走,这是因为我们在创建这些控件时没有按照所需的顺序,也就是在表单上先创建的控件,光标就先到。那么有没有办法改变这种顺序呢?有的! 我们可以设置控件的tabindex属性来改变这个顺序,但直接改变tabindex属性很麻烦,VFP提供了很方便的改变方法。用鼠标按下表单设计器工具栏上的按钮,每个控件的tabindex顺序即会标示出来,如图3,如果顺序不对,用鼠标按顺序将所
34、有控件点一遍就行了,点完后在表单空白地方按一下,tabindex显示消失。 十、改程序前应先改系统分析 当我们要对程序做功能上的修改,我们应先看看系统分析,因为一个程序的各个部分是有着千丝万缕的联系的,当改了一个地方,可能导致另一个地方出问题,所以我们应先对系统分析修改,并平衡各方面关系,觉得系统分析上没有逻辑上的冲突和错误后,再按照新的系统分析去修改程序。 这样修改永远都可以保持有一个清晰的思路,而不会把程序改来改去,到最后自己都不知道改成什么样了,如果这时需要别人来帮忙修改更是不可想象。 十一、删除项目管理器中的文件 如果不想要项目管理器中的某个文件,可用“移去”按钮将这个文件从项目管理器
35、中移出去。当您调用移去功能时,系统会问您是移去还是删除,移去一个文件并没有从磁盘上将其真正删除,如要真正删除,则应选择“删除”。 当然移去后的文件可用其它方式删除,但千万不要用其它方式删除一个在项目管理器中存在的文件,这样会造成项目管理器打开出错。一旦您很不走运出现这种情况,在打开项目管理器时会出现提示找不到某个文件,这时选择忽略,然后进入项目管理器,再将这个文件移去,这时不要用删除,因为这个文件已不存在,删除则又会出错。 十二、将磁盘上的文件添加到项目管理器中 按“添加”按钮,找到所要的文件,确定即可。 十三、设置主程序 当您在程序管理器中开始编第一个程序时,管理器会默认将其做为主程序,好比
36、我们第六课中的菜单程序,但有时可能不是第一个编主程序,这时就要重新设置主程序,方法是找到您将要设为主程序的程序,用鼠标右键单击,然后选择“设置主程序”即可,设为主程序后,该程序的文件名会变为粗体。如果您要改变主程序也可用同样方法。 第八课 程序的调试 我们在编程时难免都会出错,出错以后怎样找出错误的地方就变得很重要了,只有正确找出错误的地方才可以将其改正,下面我们就谈一些查错的常用方法。 一、如果在我们程序中有语法性的错误,当程序运行到错误的语句时系统就会停下来,并提示我们程序有错,往往还会说出是什么错误,如“命令中含有不能识别的短语或关键字”,并给出选择“取消”、“挂起”、“忽略”、“帮助”
37、四个选择,它们的意思分别是: 取消中止程序运行,回到命令窗口,相当于执行了cancel命令,在程序中创建的所有变量被释放,但数据库及数据表一般保持当时的状态,您可以用browse命令查看数据表的内容即记录指针所在的位置等等; 挂起暂停程序,相当于执行了suspend命令,这时程序中的所有变量都保持原值,您可以用?命令查看变量的值,当然也可以查看数据表的情况; 忽略忽略所出现的错误,即跳过出错的语句继续执行后面的语句; 帮助显示有关出错的帮助信息,对于错误做更详细的说明。不过很多时候都没什么帮助。 如果这时您一眼就能看出问题出在哪,那么您可以用取消,然后进到程序中找出错误所在,将其改正。在选择了
38、取消后,可能这时有表单是打开的,那么用鼠标点一下该窗口,然后调菜单上的文件关闭。如果菜单是您自己的自定义菜单,用set sysmenu to default回到系统菜单。改完后,再次运行程序前,最好将所有的数据库及表关闭,以免在程序打开一个数据表时出现表已打开的错误,比较好的办法是在程序开头先关闭所有的数据库及表。关闭所有数据库的命令是:close databases all,关闭所有表的命令是:close tables all。 如果您不知道问题出在程序的哪个地方,那么就选择挂起,系统会弹出一个调试器窗口显示出错的语句,如图1, 在跟踪窗口的黄色箭头所指的语句就是出错的语句。这时不要马上改程
39、序,因为程序还没有结束运行,如要改程序应先终止程序运行,按调试中的终止按钮,然后退出调试器,接下来与上面选择取消后的处理方法相同。 一般不要选择忽略,因为程序中上下语句都有很紧密的关系,当一条语句出错后,如果继续运行,可能会出现很多错误,而后面出错的语句可能并没有错,是因为前面错了才导致后面的语句出错,如果前面正确,后面也会正确,因此对于初学者来说,选择忽略不利于找出错误所在。 二、有些时候,程序中的语句并没有出错,但是运行的结果却不是我们所要的结果,这往往是因为我们用错了语句,虽然语句本身是正确的,但用在了不该用的地方、或者该用的地方没有用、又或者语句的先后顺序错了等等,都可能导致这种情况。
40、 一旦出现这种情况往往比上一种情况麻烦些,不容易一下看出问题出在哪里,那么需要我们仔细分析程序中的语句,看是否用的对,是否达到了我们的要求。 比如在我们前面的人事管理程序中,调出编辑人员表单,按了新增后,表单中的各控件的内容没有变,那么这就有两种可能,一是没有增加一条空记录,二是没有将控件刷新,这就要我们根据具体问题具体分析。 有时光看语句,怎么也看不出问题在哪,这就用采用一些辅助手段,最常用的辅助手段是在可能发生问题的地方将程序挂起,即在程序中加一句suspend,当程序运行到这里时将程序挂起,然后在命令窗口中查看各有关变量的值或数据表的情况。比如上面的错误,我们可以在新增按钮的click事
41、件的结尾加一句suspend,当程序运行到这里时就会挂起,我们可以用browse查看数据表,如果发现里面没有一个空记录,那么说明漏了加空记录的语句。如找到错误了,记得在命令窗口中运行cancel,将程序终止再去修改程序。 另外在程序挂起时我们可以调出器,看程序执行到什么地方,调的方法是在菜单上的工具调试器,可以在其中的监视窗口查看各表达式的值,在局部窗口查看各变量的值,而且您可以在窗口中长条文本框中输入一个表达式或变量,调试器会显示出它们的值。 如还不能找到问题,按我们将在以后的课程中讲解。 可单步执行程序,即按一下运行一条语句,这样可以更有助于找到问题。至于调试器的其它功能,常见错误 1.
42、启动一个表单后,再用代表这个表单的变量去调用它时却不行。调用表单的变量与其它变量一样,如是在一个子程序中创建的,当这个程序运行结束后,这个变量也就释放了,即这个变量不再存在了,虽然表单还在,故不能用这个变量去调用该表单了。解决的方法是将其设为公共变量,或在更高层的程序中创建,还可以在调用表单命令中加上“linked”子句。 2. 在表单中的一个事件中创建了一个变量,但在表单的其它地方却不能使用。一个事件程序相当于一个子程序,当子程序运行完后在其中创建的变量也就没不存在了。解决的方法是将其设为公共变量,或在更高层的程序中创建。 3. 4. 5. 常常在表格中或其它地方看不到数据表中的记录。这往往
43、是因为记录指针到尾部,即EOF为真。 修改记录时却个修改了另一个记录。这往往是因为进入修改后又做了查询,查询后没有将记录指针返回到原记录。 进入一个循环后就死机了。这是因为没有设置跳出循环的条件,或者条件永远不能满足,比如一个循环的跳出条件是当一个变量的值达到某一数值,每循环一次应将该变量加1,但忘了加1的语句,就会造成死循环,因为变量的值永远达不到预定的数值。 6. 查询英文时,明明有的记录查不到。这可能是大小写不一样造成的,比如:locate for name=crops,如果数据表中的是“CROPS”那么就查不到。解决的办法:locate for upper(name)=CROPS。 7
44、. 不管是英文还是中文,还是查不到所要的记录。这种情况很可能是输入的查询值后面有空格,比如还是上面那个查询语句,如果操作者不小心在文本框中输入了“crops_”,而这个空格往往是不容易被发现的,那么查询时就可能找不到,除非数据表中的数据也刚好是这样,这里要注意一点一个字符字段的内容如小于字段的长度,系统会自动为该字符后面加上空格,比如上面那个例子,如果name的长度是8,则“crops”这个记录name的值就是“crops_”,那么有三个空格和有一个空格的就不相等。解决的办法是用trim函数将输入的查询值后面的空格去掉,更进一步,为了防止不小心前面也加了空格,可用alltrim将前后的空格都去
45、掉。 8. 用do form启动一个表单后,应等关闭表单后再执行do form后面的语句,但表单启动后却接着运行后面的语句。这是因为表单的windowtype属性没有设为“1-模式”,解决的办法不用我说了吧。 9. 10. 当在数据表中移动记录指针等操作时出现意想不到的错误。往往是因为没有记录。 按索引查询时找不到所要的记录,当然记录是有的。索引没有及时更新,对于不是用的结构化索引,即所用索引不是在建表时创建的,而是以后用别的文件名创建的索引,不会与数据表一起打开,那么当数据表更新后.,解决的办法想必大伙儿都知道吧。 第九课 软件的编译及生成安装盘 软件编译 如果您的程序全部都编好了就可以开始
46、编译您的软件了,很简单,方法如下: 1. 按下项目管理器中的连编,出现对话框图1; 2. 3. 4. 5. 选择“连编可执行程序”,确定; 输入编译后的EXE文件名,注意目录,然后保存; 接着系统便进入编译过程,这一过程是电脑自动完成的。在这一过程中系统会首先检查您的程序是否有错误,如有错误有时会给出提示,在提示中您一般可以选择“忽略”、“全部忽略”、“取消”,这里的“忽略”就是不管出现的错误继续编译,当然一般不应该这样,一旦出现错误提示应选择取消,然后找出相应的错误,改正后再编译。为了容易查找错误,系统还将错误记录下来,在菜单的“项目”-“错误”中可以看到,其中会讲明是什么错误,发生在哪个程
47、序的哪一条语句中。对于有些错误会不给出提示而直接忽略,但它仍然会把错误记录下来。 如果系统编译时没有记录错误,那是因为在菜单上的“工具”-“选项”-“常规”-“编程”中的“记录编译错误”没有打开。 制作安装盘 VFP编译生成的EXE文件是不能直接在另一台电脑上运行的,除非该电脑中已经装有VFP系统,因为EXE文件的运行要依赖于安装在WINDOWS系统中的运行时刻库。为此我们要为该软件制作一套安装盘,方法如下: 1. 2. 在您开发的软件的目录下建一个子目录,比如叫exe,当然您也可以建在别什么地方或叫别的什么名字; 将该软件所要用到的数据库(dbc)、数据库备注(dct)、数据库索引(dcx)
48、、表(dbf)、表索引(cdx、idx)、表备注(fpt)、内存变量文件(mem)等等,再就是编译后的exe文件通通复制到上面所建的目录中,然后将复制过去的数据表中试运行用的记录清除,但要注意有些数据可能是软件预先应提供的,那么就不应该删除,比如在一个数据表中预先存入全国各省份名称与软件一起提供给用户,以免用户再去输入。 注意:prg文件、菜单文件、表单文件、报表文件、标签文件等等不要复制进去,因为它们已经被编译在exe文件中了,还有就是不属于软件运行的文件,如系统分析文件,也不要复制进去。 3. 4. 启动VFP系统,如果VFP系统已经启动,最好关闭所有打开的文件。 选择菜单上的“工具”-“向导”-“安装”,出现图2;