




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、这是我日常工作中所使用的 通用数据编览表单,贴出来与大家分享,下列的说明文字写得较早,现在已有不少改进尚未被写入,贴出来抛砖引玉,希望有更好的贴不断涌现,本人显丑了: 当对数据表进行浏览、编辑时都要启动本表单。本表单是本系统的核心部件之一,其上共集成了32个控件,其中有按钮20个,文本框4个(一个被隐藏),组合框2个,表格一个,有用的文本框2个,隐含的列表框1个。这些控件几乎可以完成对数据表的全部常用操作。而且由于它们与其操作的数据对象被设计成动态绑定关系,使得该表单适用于对所有VFP数据表的浏览和编辑。下面,分别介绍这些控件的功能与用法
2、(按从上到下,从左到右的顺序): 第一排从左到右分别有如下控件: (1)左上角两个文本框,分别显示表格中所列数据表的记录个数及当前记录号,随着光标在记录间的移动,当前记录号随之变化; (2)“计算”按钮:当表格中的光标移动到数值型字段上时此按钮被激活,被点击时弹出隐藏列表框,显示3个选项供用户选择,一是求表格中全部记录在该数据项上的总值,二是平均值,三是取消操作。 “计算”按钮
3、右侧紧靠的文本框显示计算的结果; (3)一组对数据记录进行筛选的控件: “筛”按钮:完成对表格中数据的筛选。筛选的条件是光标所在位置的字段值。例如,要筛选出职工信息表中所有“男”性职工信息时,只需将光标移向性别栏,字段值为“男”的记录,然后点击“筛”按钮即完成该操作。注意此按钮与其右邻按钮不同,它会使以前的筛选条件作废。 “”按钮:进一步缩小筛选范围。保持以前的筛选条件,做进一步的筛选时用之。此按钮可以多次使用,每用一次,筛选的条件便多一个,筛选的范围会进一
4、步缩小。 “全”按钮:即取消以前的筛选限制,恢复显示表格中的全部记录。 “”和“×”按钮:在其左侧文本框中输入字串后,点击这两个按钮,系统将按光标所在字段列的值中是否包含该字串选出符合条件记录。 以上六个控件,再配合“工具”菜单中的“复合筛选”、“多项筛选”、“拾取筛选条件”三个选项,可完成对数据表的几乎全部筛选操作。且方便快捷,易于操作。 (4)“序”和“×”按钮:前者是按光标所在列的值的升
5、序对数据表排序,后者是取消前者的排序操作,使表格中数据记录恢复其原始的排列顺序。 (5)“替”按钮:按条件成批修改某一字段的值,此按钮只有在编辑状态下可用。 (6)“复”和“添”按钮:前者可以复制光标所在记录,后者将其添加在数据表末尾;若没有使用“复”按钮而直接点击“添”按钮,系统会添加一条空白记录到末尾以供用户填入数据;当录入的记录间重复的数据较多时用先“复”后“添”再修改的方法,可省去很多工作量,加快数据记录的录入速度。 (7)“编辑”按钮:当要对一表格
6、中数据进行添加、修改操作时点击此钮。编辑数据的用户必须是被授权用户。当点击此钮时系统首先弹出对话框要求用户输入口令,口令正确即证明用户有修改数据的权限,此时按钮标题变为“保护”,上述“替”、“复”、“添”变得可用。此时表格中数据可以被修改。“替代”组合框将变得可用;单击“保护”按钮时,其标题恢复为“编辑”,此时“替”、“复”、“添”不可用,表格中数据被保护而不能被修改,“替代”组合框也不再可用; (8)“归类”按钮:作用是按光标所在字段值进行记录数的归类统计;对于职工信息表,可以迅速地显示每一类人员的数量,如当光标停留在性别一栏时点击此钮将分别统计
7、出职工信息中男女职工的记录数并列表显示; (9)“显删”按钮:显示或隐藏已作了删除标记的记录,此钮按过后将变成“隐删”钮,再按时将隐藏作了删除标记的记录;此钮只有在编辑状态下才可用。在编辑状态下表格中数据可以被修改,此时表格最左侧出现一狭窄的列,点击它时会变成黑块,再点击时恢复。此列被称为记录的“删除标记列”。要删除某条记录时先将其“删除标记列”点黑,随后再点击“压缩”按钮即可彻底删除之。当“显删”按钮的标题为“显删”时表示此按钮的功能是显示作过删除标记的记录。此时为“隐删”(隐藏删除)状态,当点黑某一记录的“删除标记列”时此记录随即消失,但它并未
8、被真正从数据表中移除。点击“显删”钮后用户会重新看到它。 (10)“压缩”,彻底清理数据表中作了删除标记的记录,这些记录被“压缩”后将不能再恢复; (11)“关闭”按钮:关闭数据编览表单。 第二排控件从左至右分别完成下列功能: (1)“字段名”文本框:处于表单上部第二行最左端,显示光标所在列的字段名。对于数据库表来说,表格顶部显示的标题一般不是数据表的字段名,而是字段提示名。该文本框显示当前字段名,目
9、的是为用户更好地操作数据表提供更多的有用信息。 右击此框时,其右侧会弹出一宽度直抵表单右边缘的长文本框,并且该文本框中显示的不再是当前字段名,而是“选择数据项”的提示信息,告诉用户此时可以选择数据项。此时用户只需在希望选取的数据列上点击一下,此列的字段名便会自动被加载到上述长文本框中,用户按照需要可选择任意多的数据列,这些列的字段名都一一被添加到长文本框中,之间用“,”号相隔。 当用户选定所需列后,将光标移至长文本框中,此时点击右键会弹出一快捷菜单,分别列示有输出数据到:屏幕、.txt文件、Excel文
10、件、分组查询等选项供用户使用。用户可以将由所选字段组成的新表输出到屏幕、纯文本文件或Excel电子表格供进一步使用。 上述功能与对数据的筛选功能一并使用,可完成对表格中数据横向和纵向的选择,以实现特定的用户需求。且操作简便、快捷,功能十分强大。 完成对数据列的选择之后,再右击左侧文本框时,其右侧长文本框隐藏,左侧文本框重又显示光标所在列的字段名。 (2)“定位”组合框:该控件被选中时自动与表格中光标所在字段绑定,并按一定顺序列出字段的不同值供用户选定,用户选
11、定字段的某一个值时,程序便开始查找该值对应的记录,将光标移至其上并呈现给用户供查看、编辑。该组合框与数据的动态绑定技术,使得它可以被用来查找任一字段列的值。使用户对数据表的查找定位变得轻松自如。对于记录数过大的数据表,有时结合筛选功能的使用,会大大加快查找的速度和效率。 (4)“替代”组合框:前已述及,当按第一排的“编辑”按钮并通过密码验证时,该控件变得可用,用户可以使用该组合框完成对数据的修改。此组合框与上述“定位”组合相似,它与数据列也是动态绑定关系。即它可以和表格中除备注型字段以外的任一数据列绑定。当用户选中该控件时,它便与表格中光标所在字段
12、建立数据绑定,按顺序列出字段的不同值供用户选择,用户一旦选定某值,系统便用此值修改表格中光标所在位置的字段值。此组合框,在用户录入数据表数据时,可以避免录入重复数据,提高工作效率; (5)“录入”按钮:点击时首先对用户进行身份验证,只有有权修改数据的用户才可以使用这项功能。“录入”按钮将打开一个与表格中数据表相对应的录入表单。“录入表单”与具体的数据表绑定,所以当系统开发人员为某一数据表创建了相应的录入表单时,“录入”按钮才变得可用,否则不可用。创建的录入表单一般存放在“forms”目录中或与其数据表相同的目录中,存放在其它地方的录入表单无效。
13、160; (6)“报表”和“.”按钮:与上述“录入”按钮相似,在数据表编览表单被启动时,其要做的工作之一就是检测在其将要处理的数据表所在的文件夹中或者在本系统的“Reports”子文件夹中有无与数据表同名的报表文件,若有,则这个按钮可用,否则,不可用。当可用时,单击它便可启动相应的录入表单或报表。 "."按钮被用来微调报表格式,当报表文件中有些内容需要被修改时,点击此钮可打开报表并允许用户作一定的修改。此项功能也需要口令保护。
14、; (7)“帮助”:关于本表单的帮助信息,帮助用户更好地使用之。 (8)“表格”控件:是本编览表单中最大的一个控件,用来显示被操作数据表的内容。它里面的每一个变动都与其上部控件发生着联系,传递着信息,其它控件都以它为中心。为它提供服务。并通过它来体现每一控件操作的结果。 最后修改于2007-6-22 11:27:00 学什么都不容易,学VFP也是一样 0 我要推荐 作者:user886633专家分:2390 会员信息 发短消息
15、 所属BLOG发表时间:2007-6-19 21:16:00 回复 引用1 楼 jinlonggao老师的程序基本是通用型的,放哪都实用! 互相交流,互相帮助,才有进步。Mail: 此帖被评30分作者:jinlonggao专家分:16520 会员信息 发短消息 所属BLOG发表时间:2007-6-20 8:37:00 回复 引用2 楼
16、60;是的,这个表单是通用的,表单中控件对于表格中每个列的数据也是通用的.而且,本表单可以同时打开若干个副本,即可以用此表单同时编辑浏览若干个数据表,对于两个同结构的表,可以将其一中的记录部分或全部复制到另一个表中,方法只是点击其一的"复"按钮和另一个的"添"按钮.第一排中部的文本框还兼有拼音字母快速检索功能. 学什么都不容易,学VFP也是一样作者:北京种子乐专家分:3690 会员信息 发短消息 所属BLOG发表时间:2007-6-21 2:11:00 回
17、复 引用3 楼 全部看完,受益匪浅。 朋友是无形资产 此帖被评30分作者:hongsheng119专家分:10 会员信息 发短消息 所属BLOG发表时间:2007-6-21 16:11:00 回复 引用4 楼 有没有源码的? 此帖被评10分作者:esailor专家分:2570 会员信息 发短消息
18、160;所属BLOG发表时间:2007-6-21 17:06:00 回复 引用5 楼 高先生的作品总是很有见地的。值得关注! FoxPro的忠实爱好者。重在参与,共同提高。 此帖被评20分作者:jinlonggao专家分:16520 会员信息 发短消息 所属BLOG发表时间:2007-6-21 18:27:00 回复 引用6 楼 4.2 对任意
19、字段的简单筛选在数据编览表单中浏览数据表,利用“定位”组合框、表格控件、“筛”按钮配合工作,实现某个字段的筛选,即选择数据表中某字段等于某个确定值的所有记录。先用鼠标在表格控件中点击目标字段列,再用“定位”组合选择该字段列的某个值,最后点击“筛”按钮实现筛选设定。第一步:点击表格控件中某个列时,表格的afterRorColChange事件中的代码fieldname=varread()读取了当前字段名存储在全局变量fieldname中。第二步:点击“定位”组合框时,其gotfocus(获得焦点)事件代码先被执行,从代码中可以看出,组合框的源数据是动态绑定的,每一次得到焦点,就绑定一次源数据,所以
20、,定位组合框可以定位表格中鼠标所在的除备注型字段以外的任何字段列的数据。这一绑定过程对用户是透明的,即用户无需参与也感觉不到这一过程的发生。* 定位组合框的Gotfocus事件代码:sele(tabname) && 选择当前数据表mywhere=iif(empt(filt(),'',' where '+filt() && 构造SELCET语句的WHERE条件表达式this.rowsource='SELECT DISTIN
21、CT '+fieldname+' FROM '+tabname+mywhere+' ORDER BY '+fieldname+' INTO CURSOR cur'+thisform.tag && 设定组合框的数据源为SELECT语句查询的结果点击定位组合框时,其下拉列表框会显示当前字段不同的取值供用户选择并定位到相应的记录供用户查看确认。* 定位组合框的click事件代码:sele
22、 (tabname)fvalue=iif(empt(this.value),alltrim(this.displayvalue),this.value)loca for &fieldname=iif(type(fieldname)='N'.or.type(fieldname)='Y',val(fvalue),iif(type(fieldname)='L',;iif(this.value='T',.t.,.f.),fvalue)mand3.enabled=.t.thisform.grid1.se
23、tfocus第三步:点击“筛”按钮执行其click事件代码,完成筛选设定。* “筛”按钮的click事件代码:sele (tabname) && 选择当前数据表cfilter=&tabname.&fieldname && 读取当前表当前记录指定字段的字段值ctype=type('cfilter') && 读取字段值的数据类型cTheCol = 'Column
24、39;+ alltrim(str(nCol_) && 构造表格中当前列名nSelLength = thisform.grid1.&cTheCol.text1.selLength && 读取当前列当前行鼠标所选取字符子串的长度if ctype = 'C' and nSelLength > 0 && 当前字段值类型为
25、字符型,且用户选取了子串 cSeltext = thisform.grid1.&cTheCol.text1.seltext && 读选取的子串 nSelstart = thisform.grid1.&cTheCol.text1.selstart+1 && 读选取子串的开始位置序数 cfilter = "substr(" +
26、0;fieldname + "," + allt(str(nSelstart)+","+allt(str(nSelLength)+") = '"+cSeltext + "'" && 构造筛选条件表达式else cfilter=iif(ctype='C',fieldname+'="'+cfilter+'&
27、quot;',iif(ctype='N',fieldname+'=' +ltrim(str(cfilter,12,2),fieldname+'='+iif(cfilter,'.t.','.f.') && 构造筛选条件表达式endifset filter to &cfilter &
28、;& 设置筛选条件*存储筛选表达式nfilterNo = iif(nfilterNo=20,1,nfilterNo+1)tg = thisform.tagflt&tg(nfilterNo) = filter()this.parent.text1.clickgo 简单的复合筛选执行上述对任意字段简单筛选的第一、二步以后,第三步点击“筛”按钮右邻的“”按钮,执行简单的复合筛选,即在上次筛选的表达式后用“.and.”(逻辑与)再连接一个筛选条件表达式,使筛选同时满足两个字段的取值要求。如类似“
29、性别=男and 职称=教授” 复杂的复合筛选以上两种筛选,其条件表达式中只用到“=”号和“.and.”,所以称为简单的筛选,对于需要用到“>”、“<”、“.or.”、“()”等符号的筛选,上述方法就不能实现。所以,本系统设计了复合筛选表单(图4.3左)供用户构造复合筛选条件表达式,所以此表单也可称为筛选条件表达式生成器。该生成器左上部的表格中显示的筛选条件是通过调用工具菜单的“拾取筛选条件”选项从当前数据表的每次简单的或复杂的筛选条件设定中获得的,供生成新的表达式时选用。 学什么都不容易,学VFP也是一样作者:jinlonggao专家分:16520
30、160;会员信息 发短消息 所属BLOG发表时间:2007-6-21 18:27:00 回复 引用7 楼 多项筛选对同一字段要求取多个值的筛选,称为多项筛选。系统为方便用户,也设计了专门的表单完成此项功能(如图4.3右)。 图4.3 复合筛选与多项筛选多项筛选表单由工具菜单(如图4.2)中的“多项筛选”选项调用的,在被调用时表单的列表框中列出了当前数据编览表单中表格的当前列字段的全部不同的取值,用户可以从中
31、选择多个值,鼠标左击选中(列表框左侧画“”),右击取消选择。然后击“筛选”按钮完成筛选设定。其代码如下:* 多项筛选表单INIT事件中完成对列表框的数据绑定的代码:set safe offmywhere=iif(empt(filter(),'','where '+filter() && 设定SELECT语句中WHERE条件表达式的设定sele dist ' ' as chosen,fva
32、lues from &tabname &mywhere into table datamytempthis.list1.rowsource='mytemp.chosen,fvalues' && 设定列表框的数据源this.list1.columnwidths='20,200' && 设定列表框的列宽度set safe on*“筛选”命令按
33、钮的click事件代码:sele mytemp && 此临时数据表存储的是字段的不同值和用户的选择标记set filt to chosen = '' && 筛出用户选择了的字段值* 构造筛选的条件表达式myfilter=fieldnamescan myfilter=myfilter+',"'+fvalues+'"'en
34、dsmyfilter='inlist('+myfilter+')' && 筛选条件表达式构造完成sele (myalias) && 选择当前数据表set filt to &myfilter && 执行筛选命令_screen.refresh && 刷新屏幕thisform.release
35、60; && 释放多项筛选表单多项筛选的条件表达式是用 inlist(<字段名>,<值1>,<值2>,<值n>)函数表示的,当指定字段的值等于值1到值n列表中的任何一个值时,inlist()返回值“.T.” 编号类字段的筛选实际的数据处理工作中会遇到很多的字段如“学号”、“班号”、“教师编号”等字段,本文称为“编号类字段”。这类字段的值多是由数字和字母等组成的字串,其中每一位字符都有一定的含义。如长安大学的学生班级号由8位数字组成,其前两位表示学院代码,后面接着的两位表示专业代码,再后两位表
36、示入学年份,最后两位是班级序号。所以,可由班号字段筛选出数据表中某个学院,或某个专业,或某年入学的,或某个班级的学生的记录。如筛选出05年入学的学生记录数据,筛选条件表达式应该是:substr(班级,5,2) = 05式中左边的函数返回班级编号中从第5位开始的2位数字(表示入学年份)。所以,编号类字段的筛选表达式,经常要写成:Substr(字段名,n,m) = <m位字符串>当然编号类字段的筛选也不一定要按这种方式设定,但本文特别把按此种方式所做的筛选设定,称为编号类字段筛选。相反,对于非编号类字段,只要筛选条件中要求字段值中的指定子串等于某
37、字符串常量时,把它也称为编号类字段筛选。编号类字段筛选的功能,在数据编览表单(图4.1)的“筛”和“”按钮的click事件中已编写了实现代码。但要求在点击以上按钮前,先用鼠标在表格的当前字段值中选中(涂黑)相应的子串。“筛”和“”按钮的click事件代码可通过判断单元格的selLength属性值是否为0或seltext属性值是否为空来判断用户是否做了这样的选择,从而决定如何构造筛选条件表达式。具体代码如下:* “筛”按钮的click事件代码: nSelLength = thisform.grid1.&cTheCol.text1.sel
38、Length && 读取当前列当前行鼠标所选取字符子串的长度if ctype = 'C' and nSelLength > 0 && 当前字段值类型为字符型,且用户选取了子串 cSeltext = thisform.grid1.&cTheCol.text1.seltext && 读选取的子串
39、; nSelstart = thisform.grid1.&cTheCol.text1.selstart+1 && 读选取子串的开始位置序数 cfilter="substr("+fieldname+","+allt(str(nSelstart)+","+allt(str(nSelLength)+")='"+cSeltext+"'"
40、0;&& 构造编号类字段筛选的条件表达式else cfilter=iif(ctype='C',fieldname+'="'+cfilter+'"',iif(ctype='N',fieldname+'=' +ltrim(str(cfilter,12,2),fieldname+'='+iif(cfilter,'.t.','.f.') &&am
41、p; 构造简单筛选的条件表达式endifset filter to &cfilter && 设置筛选条件 模糊条件筛选选择某个字符型字段值中包含某个子字符串的全部记录,只要求字段值中包含这个子字符串就行,子字符串具体在字段值的哪个位置无关紧要,把这样的筛选称为模糊条件筛选。模糊条件筛选的条件表达式用“$”运算符表示,具体形式为:<子字符串>$<字段名>当字段的值中含有子字符串时,它返回“.T.”在图4.1所示的数据编览表单中,文本
42、框text3及其右的“”和“×”按钮配合操作,可以实现模糊条件筛选。当用户在表格控件中某个记录的某个字段值中选择一个子串,然后点击文本框text3,被选择的子串便会自动写入text3中,此时点击“”,则设定当指定字段值中包含text3中显示内容为筛选条件,若点“×” 筛选条件表达式的保存与重用数据编览表单,可以被系统多次启用,以便用户同时能够编辑和浏览多个数据表。数据编览表单每次被启用时,其load事件代码会调用系统函数sys(2105)产生一个本次启用的标识符(10位字符串,它是独一无二的),并作为其tag属性值保存。并为此定义一个数组flt&tg(20
43、),其中“&tg”是一个宏代换,在运行时被上述tag属性的具体值取代。在上述数组中可以存储20个用户在同一数据编览表单中所做过的筛选条件表达式。以供用户重新调用,在用户每次点击“筛”按钮进行筛选时,“筛”的click事件中专门有一段代码来保存本次的筛选表达式到数组中,代码如下:* “筛”的部分click事件代码: *存储筛选表达式nfilterNo = iif(nfilterNo=20,1,nfilterNo+1) && nfilterNo为数组指针变量,指示筛选表达式的保存位置tg =&
44、#160;thisform.tag && 读取表单本次运行的标识字符串flt&tg(nfilterNo) = filter() && 保存本次的筛选条件表达式 当用户鼠标右击“筛”按钮时,表单显示前一次筛选的记录,当用户右击“”按钮时,表单显示后一次筛选的记录。事件代码如下:* “筛”的rightclick事件代码:*读取上一层筛选表达式nfilterNo = iif(nfilterNo<=1,20,n
45、filterNo-1)tg = thisform.tagcfilter = flt&tg(nfilterNo)set filter to &cfilter. * “”的rightclick事件代码:*读取下一层筛选表达式nfilterNo = iif(nfilterNo>=20,1,nfilterNo+1)tg = thisform.tagcfilter = flt&tg(nfil
46、terNo)set filt to &cfilter 学什么都不容易,学VFP也是一样作者:wangzhaojing专家分:20 会员信息 发短消息 所属BLOG发表时间:2007-6-21 20:22:00 回复 引用8 楼 真老大! 此帖尚未评分作者:user886633专家分:2390 会员信
47、息 发短消息 所属BLOG发表时间:2007-6-21 20:32:00 回复 引用9 楼 引用: 真老大! 互相交流,互相帮助,才有进步。Mail: 此帖尚未评分作者:yangjh5632专家分:0 会员信息 发短消息 所属BLOG发表时间:2007-6-22 19:58:00
48、回复 引用10 楼 厉害,你是我老师 此帖尚未评分作者:jinlonggao专家分:16520 会员信息 发短消息 所属BLOG发表时间:2007-6-24 20:59:00 回复 引用11 楼 谢谢以上三层朋友的关注,只是没有建设性的意见,所以不加分.希望能以此贴抛砖引玉!请朋友们继续关注! 学什么都不容易,学VFP也是一样作者:l021126专家分:660 会员信息
49、60;发短消息 所属BLOG发表时间:2007-7-18 10:38:00 回复 引用12 楼 高进龙老师觉得您的这个"通用数据编览表单"确实不错,我还学习了您的"从当前工作区中打开的任意dbf-table或cursor 到 EXCEL-table的实现过程"也很实用,很不错,能提供这个表单的源码吗?提供压缩包下载,或发给我的邮箱 十二万分的感谢 此帖被评20分作者:jinlong
50、gao专家分:16520 会员信息 发短消息 所属BLOG发表时间:2007-7-20 11:25:00 回复 引用13 楼 谢谢1021126先生的观注,本表单涉及的代码很多,问题也很多,目前还在调试,之所以贴出来,是为了给大家提供一个设计方法和编程思路,供大家讨论。待时机成熟后,我会考虑公布源代码。再次感谢! 学什么都不容易,学VFP也是一样作者:l021126专家分:660 会员信息 发短消息
51、;所属BLOG发表时间:2007-8-16 16:10:00 回复 引用14 楼 引用: 谢谢1021126先生的观注,本表单涉及的代码很多,问题也很多,目前还在调试,之所以贴出来,是为了给大家提供一个设计方法和编程思路,供大家讨论。待时机成熟后,我会考虑公布源代码。再次感谢!不知高老师的<通用数据浏览表单>调试进展怎样?很是期待!或者是否可以提前将半成品贴出,注明你认为还不成熟的地方及想达到的功能,大家集思广益,协作攻坚,可否? 此帖被评20分作者:myww专家分:1020
52、0;会员信息 发短消息 所属BLOG发表时间:2007-10-11 17:01:00 回复 引用15 楼 高教师,您好! 我在另一帖子上所说的“限制条件”就这意思。相当棒! 请问,有源码吗?可否索要一个?我的电子邮箱是:MYZNS01163.COM 谢谢! 此帖尚未评分作者:jinlonggao专家分:16520
53、会员信息 发短消息 所属BLOG发表时间:2007-10-11 17:12:00 回复 引用16 楼 myww:你好!本表单的原代码很多,而且需要主控程序的支持,目前尚不能完全摘离,所以,只能先将编程思想在本贴中告诉大家,以启发大家的思维待以后时机成熟,我会像上一贴子那样拿出来与大家分享谢谢观注! 学什么都不容易,学VFP也是一样作者:myww专家分:1020 会员信息 发短消息 所属BLOG发表时间:200
54、7-10-11 19:23:00 回复 引用17 楼 高老师,您好! 感谢您对我回帖的关注。我会耐心地期待您与我们分享快乐的那一刻! 此帖被评10分作者:时光倒流专家分:600 会员信息 发短消息 所属BLOG发表时间:2007-10-11 19:47:00 回复 引用18 楼 好教材啊!谢谢老师的无私奉献!
55、;共同的爱好,共同的追求 此帖被评10分值此国庆佳节到来之际,献上我过去做的小东东,对各位高手来说不算什么,但对初学者朋友,会有点帮助顺祝论坛上各位老手更加精道,各位初学者,飞速精进!也祝全体论坛朋友节日快乐!尤其要特别向本论坛的版主及各位副版主表诚挚感谢和衷心祝愿,祝你们在国庆佳节身体健康!万事如意!VFP组合框动态数据绑定实例之查找定位控件设计作者:高进龙单位:长安大学摘 要:本文介绍在VFP表单中,用对组合框源数据进行动态绑定的方法,实现对任意数据表中任意字段的查找定位功能。关键词:组合框,动态绑定,数据表,字段,查找,定位 =
56、60;6 (字段)其余属性设为默认值。方法设置:Combo1.Init:public fvalue &&为字段值变量fvalue=''Combo1.refresh:this.enabled=iif(empt(fieldname).or.type(fieldname)='M',.f.,.t.) &&对备注型字段不可用Combo1.gotfocus:cursor_table
57、160;= tabname+'_'+fieldname+'_cmb1' &&cursor_table 是为组合框提供数据源的临时表名称,tabname为当前数据表名称,fieldname为当前字段名,这一语句的功能是按当前操作的数据表名称和当前选中的数据列名称为组合框动态构造数据源表名称,tabname和fieldname两变量的值由Grid1提供。if used(cursor_table) &&如果上句所构造的数据源表(临时表,仅存于内存,也称游标)已存在
58、,则选择其所在工作区,并关闭之 sele(cursor_table) useendifsele(tabname)mywhere=iif(empt(filt(),'','where '+filt() &&为下列的SQL查询语句构造Where子句,当前操作的表若有筛选条件,则将其作为Where 子句中的条件SELECT DISTINCT &fieldname; FROM &tabname &mywhere
59、; ORDER BY &fieldname INTO CURSOR &cursor_table&&生成组合框的数据源表(临时表)this.rowsource=cursor_table + '.' + alltrim(fieldname) &&为组合框绑定数据源Combo1.click:sele (tabname)fvalue=iif(empt(this.value),alltrim(this.disp
60、layvalue),this.value)loca for &fieldname=;iif(inlist(type(fieldname),'N','Y'), val(fvalue),;iif(type(fieldname)='L', iif(this.value='T',.t.,.f.), fvalue)&&用Loca for &&让Grid1得到焦点mand1.enable
61、d=.t. &&command1为一按钮,用来对与当前字段值相同的下一条记录进行定位。继续定位的辅助按钮Command1.Click 如下:if !empt(fvalue) set near on continue thisform.refreshelse this.enabled=.f.endifGrid1.Init:Public tabname, fieldnameTabname = a
62、lias() &&获得当前数据表别名Fieldname = Grid1.AfterRowColChange:fieldname=varread() &&将鼠标所点击的表格列对应的字段名称反馈给公共变量form1.Activetabname = &&这一句的目的是为了保证本表单的可重载性,即本表单可以被用户在同一时间多次调用以便同时操作多个数据表。四、结语本程序在WindowsXP系统中调试运行成功,并运用于实际工作中。参考文献1
63、李加福等,Visual Foxpro6.0中文版入门与提高.清华大学出版社. 北京. 1999.6. 2 方盈,SQL Server7.0从入门到精通. 中国铁道出版社. 1999.北京 运行combo_grid.exe文件,要求机子上已安装Vfp系统。需要源码的朋友,请发mail给我,并做简单的自我介绍 最后修改于2007-9-30 11:10:00 学什么都不容易,学VFP也是一样 0 我要推荐 作者:winabcd专家分:3710 会员信息 发短
64、消息 所属BLOG发表时间:2007-9-30 10:01:00 回复 引用1 楼 好东西,值得我好好学习学习。 VFP 想甩掉你不容易 此帖被评10分作者:cbl518专家分:54030 会员信息 发短消息 所属BLOG发表时间:2007-9-30 10:48:00 回复 引用2 楼 jinlonggao 老师
65、的无私奉献精神是我的学习榜样! 中国青年一代要是有这一半的精神,那恐怕我们现在用的,就是自己的操作系统,和编程环境了。 请用评分的方法,肯定网友对你的帮助! 相互理解,相互帮助,携手创建更好的学习、讨论环境。 此帖被评10分作者:whatfor专家分:30 会员信息 发短消息 所属BLOG发表时间:2007-9-30 10:51:00 回复
66、0;引用3 楼 支持jinlonggao老师 刚开始学VF搞软件,菜鸟中的菜鸟 QQ 307751060 此帖被评10分作者:myww专家分:1020 会员信息 发短消息 所属BLOG发表时间:2007-9-30 14:03:00 回复 引用4 楼 jinlonggao老师,请问您的邮箱地址怎么写? 此帖尚未评分作者:yjr3032570专家分:2820 会员信息 发
67、短消息 所属BLOG发表时间:2007-9-30 14:46:00 回复 引用5 楼 jinlonggao老师的东东,值的收藏,一旦变现,嘿嘿. 此帖尚未评分作者:kewang专家分:190 会员信息 发短消息 所属BLOG发表时间:2007-10-1 22:15:00 回复 引用6 楼 高老师辛苦了。来得迟了,祝教师国庆快乐!&
68、#160;放弃坚持皆自由! 此帖尚未评分作者:jinlonggao专家分:16520 会员信息 发短消息 所属BLOG发表时间:2007-10-2 12:40:00 回复 引用7 楼 四、五、六楼的朋友,谢谢关注本贴,已经给四、五楼朋友发过去了,请查收。六楼的王老师,我也给您发一份,请指教! 学什么都不容易,学VFP也是一样作者:myww专家分:1020 会员信息 发短消息 所属BLOG发
69、表时间:2007-10-2 18:13:00 回复 引用8 楼 尊敬的高老师,电子邮件收到了,感谢您! 但我运行表单时,在“打开数据表”时,出现“命令中含有不能识别的短语或关健字”,请您方便时指教! 祝您国庆快乐! MYWW
70、160; 2007.10.2. 此帖被评10分作者:jinlonggao专家分:16520 会员信息 发短消息 所属BLOG发表时间:2007-10-6 14:21:00 回复 引用9 楼
71、160; 你打开的数据表是不是在一个含有空格的文件夹(目录)内保存着?这个问题我在后来的源码里已经改过了,发给你的是先前做好的,没有来得及更新,实在不好意思,好在有问题更便于学习和研究今天较忙,来不及细纠,我将手头的表单中打开数据表按钮的代码贴在下面,你看看是否与你的表单中相同?是否在use一句中有差异?public pathstab_name='数据表'tab_name=getfile('dbf','数据表')if empt(tab_name) retuendiftabn=strt(lower
72、(subs(tab_name,rat('',tab_name)+1),'.dbf','')tabn=iif(isdigit(tabn),'D'+tabn,tabn)if !used(tabn) sele 0 use(tab_name) alia &tabnelse sele(tabn) endifthisform.caption = = -1thisfor
73、m.grid1.initthisform.refresh 最后修改于2007-10-6 14:26:00学什么都不容易,学VFP也是一样作者:seel专家分:250 会员信息 发短消息 所属BLOG发表时间:2007-10-7 1:11:00 回复 引用10 楼 偶是新人,不知能否有幸得到jinlonggao老师的东东 此帖尚未评分作者:myww专家分:1020 会员信息 发短消息
74、160; 所属BLOG发表时间:2007-10-7 13:22:00 回复 引用11 楼 尊敬的高老师,我将您新的代码粘贴后,运行正常,非常感谢您!在我们这个编程爱好者的园地里,有这样一位好老师,真是我们这些只知皮毛的爱好者的福音啊! 祝您国庆大假最后一天也很快乐!
75、0; MYWW 2007.10.7 此帖尚未评分作者:jinlonggao专家分:16520 会员信息 发短消息 所属BLOG发表时间:2007-10-7 14:22:00 回复 引用12 楼 已经给楼的朋友发了发出的东东仍然是旧版,也存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45653-2025新能源汽车售后服务规范
- GB/T 28634-2025微束分析电子探针显微分析块状试样波谱法定量点分析
- 护理服务品牌建设与管理
- 轮流接送小孩协议书
- 餐饮股权收购协议书
- 车位喷绘转让协议书
- 车辆借款使用协议书
- 轮胎维修合同协议书
- 合作伙伴签合同协议书
- eve物品委托协议书
- 矿坑涌水量预测计算规程
- 娱乐用高空滑索装置项目可行性实施报告
- 广东省深圳市罗湖区2023-2024学年二年级下学期期末考试数学试题
- 四川省成都市2024年中考道德与法治真题试卷 附答案
- 液化天然气汽车加气站技术规范
- (正式版)SHT 3158-2024 石油化工管壳式余热锅炉
- 加油站百日攻坚行动实施方案
- 供电企业舆情的预防及处置
- GB/T 41666.4-2024地下无压排水管网非开挖修复用塑料管道系统第4部分:原位固化内衬法
- 4、《通向金融王国的自由之路》
- 大学生职业素养(高职)全套教学课件
评论
0/150
提交评论