Visual foxpro学习笔记_第1页
Visual foxpro学习笔记_第2页
Visual foxpro学习笔记_第3页
Visual foxpro学习笔记_第4页
Visual foxpro学习笔记_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Visual foxpro学习笔记关于索引:索引文件其实是只包含索引关键字与记录号的数据库文件。在vf6.0中的索引文件有两种,一种是单索引文件,另一种是复合索引文件,而复合索引文件又分为结构型复合索引文件与非结构型复合索引文件。它们的区别是单索引文件是用一个关键字表达式进行索引的文件,而复合索引文件可以看作是多个单索引文件的集合,也就是说可以看成是多个单索引文件合在一起,只不过用了同一个文件名而已,好比班级集体与单个学生之间的关系,在使用时,如果复合索引中只有一个索引,它与单索引文件一样,如果超过一个以上,为了告诉VF用哪一个排序,就得用一个叫做标记的变量来引用复合索引中的单个索引。另一个结

2、构与非结构的区别是:结构代表索引文件与表文件名相同,并随表文件的打开而打开,而非结构则不能随表的打开而打开,并且文件名与表文件名不同。这里还有一个疑问,复合索引与多关键字索引不一样,比如先按性别排序,如果相同,再按成绩排序,这种排序不是复合索引。建立索引的方法很多,但应注意一点,在用表设计器建立索引时,生成的文件都是复合索引,每一个索引关键字是复合索引中的一个标记。查找:查找有三个命令:findseeklocate索引查询命令:find与seekFind命令只能用在有索引文件并已经打开索引文件的条件下,使用时,直接在命令后面跟上要查找的关键字,不需要加引号,如果查找的是数字,那在查找时只找与数

3、字完全一样的记录,如果是字符,可以查找全部或从左边开始与查找字符相同的记录,如果找到就把指针定位在找到的记录上。它后面不能跟表达式。Seek命令与find完全相同,不同地方是seek后面可以是表达式,而find不可以。顺序查询命令:locate命令格式:LOCATE <范围> FOR<条件> WHILE<条件>CONTINUELOCATE命令在当前库文件中按照记录号的顺序由上而下依次查找满足指定条件的第一个记录。若查找成功,即把记录指针定位于该记录,在屏幕上显示该记录号,同时函数FOUND()返回值为.T.;否则记录指针移到指定范围的最后记录上,屏幕上显示“

4、End of locate scope.”,函数FOUND()返回值为.F.。当命令中缺省<范围>时,默认为ALL,如果所有可选项都缺省,则指针移向文件首记录。CONTINUE命令必须与LOCATE命令配合使用,用以查找满足条件的下一个记录。CONTINUE命令可连续使用直至查到文件结束为止。例:按指定条件定位记录LOCATE FOR sold = 18 && 将记录定位在第1个年龄为18的学生记录上LOCATE FOR ssex = “男” && 将记录定位在第1个男同学记录上查询的结果仅确定了记录指针的位置,若要了解记录的数据,还须与DISPLA

5、Y命令配合使用。库文件的分类排序通过索引可以实现库文件的排序显示,然而库文件索引后本身并未变化,各记录仍按原来输入的次序排列,并非数据的重新组织。利用SORT命令能在已有库文件之外产生一个新的有序库文件,从而真正实现数据的重新组织。命令格式:SORT TO <新文件名> ON <字段名1> /A/C/D ,<字段名2> /A/C/D <范围> FIELDS <字段名表> WHILE <条件> FOR <条件>其中TO短语和ON短语的书写次序可随意交换。<范围>、FOR <条件>及WHIL

6、E <条件>等可选项用以确定当前库文件中需对哪些记录进行排序。若这些可选项在命令中缺省,则表示对全部记录排序。排序生成的新库文件默认扩展名为.DBF。新文件的结构由命令中的可选项FIELDS <字段名表>确定。若缺省此可选项,则新文件的结构与当前库文件的结构相同。若命令中出现多个字段名,表示多重排序。即先对<字段名1>排序,对于其中键值相同的记录,再按<字段名2>排序,依次类推。可选项/A与/D分别表示升序或降序排序。按升序排序时/A也可省略不写。C表示排序时不区分字母的大小写,它可以与/A或/D联合使用。例:按年龄排序USE studentSO

7、RT ON sold TO tt1.dbf && 按年龄从小到大排序,并将结果存入tt1.dbf中索引和排序的比较1.当排序的关键字只有单个字段名时,两条命令的关键字部分写法完全相同,但若排序的关键字为多个字段名时,在SORT命令中只须将这多个字段名依次列出,而在索引命令中,则要把他们组合成一个字符型表达式。例如:SORT ON sold, sno TO tt2INDEX ON STR(sold,2)+sno TO tt32.执行SORT命令后将产生一个新的排序的库文件,而索引命令只产生一个索引文件,不改变原来库文件的记录顺序。尽管用SORT命令排序存在一些方便之处,但执行SO

8、RT命令时要求有较大的内存,另外在磁盘上也至少要有当前库文件三倍容量的自由空间,因此凡索引能解决的问题,一般都不用SORT命令解决。隐藏VF主窗口方法一:在一个程序文件中加入命令:_screen.visible=.f.。把这个程序文件设为主文件。但要注意,还要设一个表单为顶层表单,否则会一闪而过。方法二:建一个名为config.fpw的文本文件,在其中加入命令:screen=off,但还是要注意,把一个表单设为顶层表单。原理分析:screen这个变量是指主窗口,也就是表单属性中showwindows属性中的“在屏幕中”的“屏幕”,也就是说,VF默认主窗口为顶层表单,而一个程序最少得有一个顶层表

9、单,如果把这个默认的顶层表单隐藏了,就必须设一个自编的表单。表单只有两种状态,要么做为项层表单,不受其它表单影响,要么做为“在项层表单中”,这样它随主表单(项层表单)的打开而打开,关闭而关闭。Config.fpw是一个VF的配置文件,在其中可加入许多命令,如:rescource=off,这样生成的EXE文件就不会在运行时产生FOXUSER.DBF和FOXUSER.FPT这两个文件。两种方法比较的话用配置文件会更好,不会出现闪动,还有命令cancel与quit,后者会更好,也不会闪动。Read events与clear events在开始接受事件处理时应加入read events命令,完时加入c

10、lear events命令,如果开始不加的话,VF就为会开始处理事件程序,会一闪而过,(针对EXE文件来说,APP文件不需要),clear events命令告诉VF结束事件程序处理,但并不等于退出程序,要退出需加入cancel命令或quit命令。项层表单上运行菜单步骤:1、隐藏主窗口,设置一个顶层表单。2、把菜单设为“在顶层表单中”(在常规选项中设置)。2、在项层表单的init 事件中加入do menu.mpr with thisform,.t.。设置相对路径SYS()函数返回 Visual FoxPro 系统信息。返值类型 字符型 说明Visual FoxPro 的 SYS()函数返回字符值

11、,该字符值包含有用的系统信息。下表显示了每个 SYS()函数返回的信息。获得 SYS()函数的帮助 在命令窗口或程序中突出 SYS()函数,并按F1 键。函数名称 函数功能 说明 SYS(0) 网络机器信息 SYS(1) 儒略(Julian)系统日期 SYS(2) 自午夜开始以秒计的时间 SYS(3) 合法的文件名 SYS(5) 默认驱动器 SYS(6) 当前打印设备 SYS(7) 当前格式文件 SYS(9) Visual FoxPro 系列号 SYS(10) 来自儒略(Julian)日期的字符串 SYS(11) 儒略(Julian)日期 SYS(12) 可用内存的字节数 SYS(13) 打印

12、机状态 如果打印机没有准备就绪,SYS(13)返回 OFFLINE;如果打印机准备就绪,SYS(13)返回 READY。如果打印机连接到一个串行通信端口,当打印机返回“Clear To Send Data”或“DataSet Ready”时,SYS(13)返回 READY。如果打印机连接到一个并行端口上,当打印机返回“Out of”、“I/O Error”、“Time Out”、“Printer Busy”或“Printer Not Selected”时,SYS(13)返回OFFLINE。 SYS(14) 索引表达式 SYS(15) 字符转换 SYS(16) 执行程序文件名 SYS(17) 正

13、在使用的处理器 SYS(18) 当前控件 SYS(20) 转换德文文本 SYS(21) 控制索引编号 SYS(22) 控制标志或索引名 SYS(23) Visual FoxPro 的 EMS 内存用法 SYS(24) EMS 内存限制 SYS(100) 控制台设置 SYS(101) 设备设置 SYS(102) 打印机设置 SYS(103) 对话设置 SYS(1001) Visual FoxPro 内存 SYS(1016) 用户对象的内存使用 SYS(1023) 启用诊断帮助模式 SYS(1024) 终止诊断帮助模式 SYS(1037) “页面设置”对话框 SYS(1269) 属性信息 SYS(

14、1270) 对象位置 SYS(1271) 对象的SCX 文件 SYS(1272) 对象层次 SYS(1500) 激活系统菜单项 SYS(2000) 文件名通配符匹配 SYS(2001) SET命令状态 SYS(2002) 打开或关闭插入点 SYS(2003) 当前目录 SYS(2004) Visual FoxPro 启动目录或文件夹 SYS(2005) 当前资源文件 SYS(2006) 当前图形适配卡 SYS(2007) 检查求和值 SYS(2010) CONFIG.SYS文件设置 SYS(2011) 当前锁定状态 SYS(2012) 备注字段块大小 SYS(2013) 系统菜单名称字符串 S

15、YS(2014) 最小化路径 SYS(2015) 唯一过程名 SYS(2016) SHOW GETS WINDOW 名称 SYS(2017) 显示启动屏幕 SYS(2018) 错误信息参数 SYS(2019) 配置文件名称和位置 SYS(2020) 默认磁盘空间 SYS(2021) 筛选表达式 SYS(2022) 磁盘簇(块)大小 SYS(2023) 临时文件驱动器 SYS(2029) 表类型 SYS(2333) 开启或关闭ActiveX 的双界面支持设置相对路径mlh=rat("",sys(16) lj=substr(SYS(16),1,mlh-1) set defaul

16、t to &lj上面这段代码只能放在最开始的程序文件中进行初始化,注意:rat()函数是返回某一字符串在另一字符串中的位置,是从最右边开始算起;而substr()是截取某一串字符中指定的字符。Set defalut to 是设置默认路径的,但后面只能跟字符,不能跟变量,且字符中不能有空格,如有应加引号,如果是变量要用宏带换符&.如果变量中也有空格,也要加引号,如:”&lj”.1。文本文件如何追加到备注型字段或将某段字符串追加到备注型字段2。如何查找备注型字段中的某段字符 谢谢!repl XXX with filetostr("*.txt")sss$X

17、XX1、追加是加ADDI:REPL 备注字段名 with filetostr("*.txt") ADDI2、除使用$外(包含为真,否则为假),at/rat等函数都可以返回字符的所在位置(不包含为0)判断一个表中的记录为空:同时满足eof()与bof()为真。在表单上更改OLE字段的值方法:加一个命令按扭,通过单击,然后打开一个文件打开对话框,选择一个文件,如果不为空,就把这个文件加进来。要用要三个函数:getfile()与appdnd general以及empty()显示一个获取文件名的对话框,并返回所选取的文件名。语法GETFILE(文件扩展名 ,提示信息

18、60;,确定按钮的标题   ,按钮状态)返值类型字符型参数描述文件扩展名:指定在对话框中显示的文件扩展名。比如您只需要选取 bmp 图形文件,那么您就可以用 getfile('bmp'),在对话框的文件选取区(搜索)就只显示扩展名为 bmp 的文件和目录,文件类型区则显示 bmp,表示现在可供选择的文件只有 bmp,不过您也可以在这将文件类型改为全部文件。如果是空字符串或省略,则所有文件都显示出来供选择。扩展名中也可以用通配符 * 和 ?。还可以加扩

19、展名说明,比如:getfile('位图文件:bmp'),那么在文件类型处就会显示“位图文件”以代替“bmp”。也可以有多个扩展名,其中有分号(;)隔开,比如:getfile('dbf;idx;cdx')这样在文件类型中就可以有多种文件类型供选择。提示信息:您可以在对话框中输入文件的地方放上您自己的提示信息,比如:getfile('bmp','输入文件名')不过要注意的是提示信息只能有10个字符,也就是5个汉字。确定按钮的标题:在对话框中有一个确定按钮,按下此按钮后,该函数就返回所选定的文件名,包括路径,您可以在该按钮上放上您喜欢的

20、字符,比如:getfile('bmp','输入文件名','OK')按钮状态:该参数可以设为0、1、2,0与省略是一样的。设为1,对话框中将会有一个“新建”按钮,按下此按钮,该函数将会返回“untitle”文件名,扩展名则根据文件类型而定。设为2,会有一个“无”按钮,按手册上说按下这个按钮将会返回空字符串,但实际上与设置为1时是一样的,不知是怎么回事。说明如果在对话框中按了 Esc 键、按了“取消”按钮或者按了右上角的关闭按钮,那么函数将返回空字符串。另有一个函数 getdir() 用于获取目录名,用法与此函

21、数相似。还有 getpict(),用于获取图片文件,其实就相当于 getfile('bmp;ico')。getprinter() 用于获取打印机。示例我们在用其它的软件时经常会碰到要求输入文件名的情况,这时往往在输入文件名的文本框边上有一个“浏览”窗口,按下此按钮就弹出文件选择对话框,可在其中选择文件名,按确定按钮后可将文件名自动填到文件输入的文本框中,有了 getfile() 函数,您也可以做出这样的程序来了。比如我们有一个存放图片文件的表,需要将硬盘上的一些图片文件放入表中,那么就可以用 getfile()

22、0;获取图片文件名,再将它用 append general 命令放数据表的通用字段。方法就是设一输入文件名的文本框,假设是 text1,为其设一个 controlsource 变量,比如fname,在文本框旁边放一个按钮,其 click 事件中写入如下语句:fname=getfile('bmp')thisform.text1.refresh然后可用另一个“存盘”按钮将该文件存入表中。注意有时操作者可能不用这个浏览按钮,而直接输入文件名,但这样就可能输错文件名,如果根据错误的文件名存入表中,就会造成程

23、序出错,为了避免这种情况可在 append general 语句前用 file() 函数检查一下这个文件是否存在,如果不存在则提示操作者重新输入文件名,比如“存盘”按钮中的程序可以是这样:   if file(fname)  append general 图片 from &fnameelse  message(fname+'文件不存在,请重新输入!',48+0+0,'注意')  

24、;thisform.text1.setfocusendif在有些软件中为了减少操作出错,干脆将输入文件名的文本框设为只读,甚至将 enabled 设为 .f.,只能通过按钮来选择文件名。A P P E N D G E N E R A L 命令从文件中导入 O L E 对象, 并将其放入通用字段中。语法A P P E N D G E N E R A L G e n e r a lF ie ld N a m e F R O M F i l eN a m e D A T A c E x p r e s s i o n L I N K C L A S S O L E C

25、l a s s N a m e参数描述G e n e r a l F i e l d N a m e指定放置 O L E 对象的通用字段名。可以用带有表别名的字段名来指定在非当前工作区中打开的表的通用字段。F R O M F i l e N a m e指定包含 O L E 对象的文件。必须给出文件全名, 包括扩展名。如果文件不在当前目录或当前文件夹中, 还需要给出文件的路径。D A T A c E x p r e s s i o n指定字符表达式, 此表达式作为一个字符串存入 O L E 对象的通用字段中。O L E 对象必须能接收和处理字符串。例如, 不能往 P a i n t b r u

26、s h 的图片对象中存入字符串。L I N K建立 O L E 对象和包含对象的文件间的链接。O L E 对象出现在通用字段, 但对象定义仍在文件中。如果省略 L I N K , O L E 对象将嵌入到通用字段中。C L A S S O L E C l a s s N a m e为 O L E 对象指定具体的 O L E 类, 而不用其默认类。提示 您可以通过运行 R E G E D I T 并双击某一 O L E 对象来确定该对象的类名,类名列在“ 标识符” 后。当包含 O L E 对象的文件的扩展名不同于默认扩展名, 并且要强制类行为时, 您可以指定类名。如果默认扩展名可用于多个 O L

27、 E 服务程序, 可用该类指定具体的服务程序。说明如果在通用字段中已有一个 O L E 对象, 它将被源文件中的 O L E 对象取代。若要从通用字段中删除一个 O L E 对象, 可不带任何附加参数地使用 A P P E N D G E N E R A LG e n e r a l F i e l d N a m e 命令( G e n e r a l F i e l d N a m e 是要清理的通用字段的名称) 。其它相关信息, 请参阅M i c r o s o f t V i s u a l F o x P r o 6 . 0 中文版程序员指南第十六章“ 添加O L E ” 。示例以下

28、示例从 E x c e l 目录或文件夹中导入 M i c r o s o f t E x c e l 图表, 存入通用字段m y g e n f i e l d 中。C R E A T E T A B L E M y G e n T b l ( m y g e n f i e l d G )A P P E N D B L A N K & & 添加一个空记录m y g e n f i e l d C : E X C E L B O O K 1 . X L S C L A S S E X C E L C H A R T请参阅 . . . SA Y 图片或 O L E 对象, M

29、O D I F Y G E N E R A L , O L E B o u n d 控件MESSAGEBOX()MESSAGEBOX() 函数可以显示一个自定义的对话框。常用作提示之用,也可以作一些简单的选择,比如“确定”、“取消”等,程序中经常用到的一个函数。语法MESSAGEBOX(提示信息,对话框的属型,对话框窗口标题)返值类型: 数值型参数描述提示信息:对话框中所用到的提示文字。对话框的属型:用于确定对话框的按钮、图标等属性,这是一个数值型的参数。设置按钮属性值          

30、60;                        对话框按钮属性 0                         

31、;            仅有一个“确定”按钮。 1                                     有“

32、确定”和“取消”按钮。 2                                     有三个按钮,分别是“终止”、“重试”、“忽略”。 3      

33、60;                             “是”、“否”和“取消”按钮。 4                  

34、60;                 “是”和“否”。 5                               

35、;     “重试”和“取消”。 比如:messagebox('是否真的要退出系统?',4)如果省略这个参数就相当于是0。设置图标值                                 

36、60;          图标 16                                       

37、60;   红色叉号 32                                           问号48   &#

38、160;                                       感叹号 64           

39、                                字母I如果又想要图标,又想要“是”、“否”两个按钮,可以按照如下的方式去做messagebox('是否真的要退出系统?',4+32)设置隐含按钮值    

40、60;                                    隐含按钮 0             &#

41、160;                            第一个按钮。 256                    

42、60;                 第二个按钮。 512                               

43、0;      第三个按钮。 比如:messagebox('是否真的要退出系统?',4+32)这一句,您希望显示对话框时,隐含的按钮为“否”,也就是按下“回车”键即代表“否”,那么就写成如下形式:messagebox('是否真的要退出系统?',4+32+256)对话框窗口标题:显示在对话框窗口上部,那个蓝色区域内的信息。比如:messagebox('是否真的要退出系统?',4+32+256,'注意')如果设的数大于按钮的数,比如设为512,但只有两个按钮,则隐含还是第一个按钮。说明

44、在对话框中按了不同的键,该函数将返回不同的值,键值对应如下:值 键 1 确定 2 取消 3 终止 4 重试 5 忽略 6 是 7 否 这样我们就以根据不同的返回值作不同的处理了。过滤一些记录Set delete on/off 过滤被删除的记录,注意对goto不起作用。Set filter to <条件>在grid控件中如果删除记录会引起控件空白,一个好的解决办法是先把控件的数据源设为空,在删除后再把数据源设为原来的cursor的名字,注意要加引号,如:ThisForm.grd_4xx.recordsource=nulldelete packThisForm.grd_4xx.reco

45、rdsource="_4xx"thisform.refresh在这里的_4xx为数据环境中的一个指针对象的名字。使grid表格控件与文本控件同步的方法:在grid的afterRowColChange事件中加入thisform.refresh关于在VFP中GRID里颜色设置问题1、只设置一条记录颜色(有选择性)主要是针对一个表GRID里,当我们选择了某个记录时,要使这个记录高亮显示,以区别其他记录,方便查看。在GRID的AfterRowColChange事件中,写入如下代码LPARAMETERS nColIndex && 系统代码Mcurrec=allt(st

46、r(recn() && 获取当前所在记录号this.setall("dynamicbackcolor",'IIF(RECNO()=&Mcurrec.,RGB(255,0,0),RGB(255,255,255)') && 设置背景色,满足条件为红色,不满足为白色this.setall("dynamicforecolor",'IIF(RECNO()=&Mcurrec.,RGB(255,255,0),RGB(0,0,0)',"column") &&

47、; 设置前景色,满足条件为黄色,不满足为黑色this.refresh && 这个刷新必须要,不然不满足条件的记录所显示的高亮显示就不会退去2、设置多种颜色(无规律性)主要是针对一个表GRID里,当记录很多时,而且某些记录具有特定的属性时,我们需要设置颜色来区分这些数据,如下代码可以在刷新或初始化表单时,设置其属性。thisform.Grid1.SetAll("DynamicBackColor","IIF(type>=1,iif(type>=2,iif(type>=3,rgb(0,128,0),rgb(192,192,192),rg

48、b(255,0,0),rgb(255,255,255)")如上代码可以说明,如果某记录中有一个字段type,那么根据这个字段的数据值,可以显示不同颜色,可以转换成如下公式:iif(条件1,iif(条件2,iif(条件3,iif(条件4,iif(条件5,.iif(条件N,颜色N,颜色n-1).,颜色5,颜色4),颜色3),颜色2),颜色1),其他颜色)3、设置多种颜色(有规律性)这种就比较简单了,一般是在看较多记录时,多了让人眼花缭乱,所以每隔一行设置颜色,就是thisform.Grid1.SetAll("DynamicBackColor", "IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255) , RGB(0,255,0)", "Column")如何在GRID的单元格中显示列表框第一步:在属性对话框中选择到GRID1某列下的TEXT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论