视觉foxpro3.0经验14
使用面向对象编程的程序员会涉及到图书馆,但当继承关系的对象由两层以上之间(这是一个很普遍的现象),只要修改两层以上的内容对象,会惊奇的发现:虽然修正最小(有时干脆删除),但每一个磁盘操作会使库容量(即,你看到的字节数)增加很多,有时一个磁盘操作可以使几十K的容量增加!我有一个类库,只有50K的真实内容,当调试完成后,发现该类库的容量有800多K,我已经做了很多机器上的多个版本的实验,这个问题仍然是相同的。消除病毒骚扰的因素之后,可以肯定的是,这是一个Visual FoxPro本身固有的缺陷。
显然,这个问题给程序的开发带来了一些小麻烦,如何解决呢我查了很多信息,做了实验,他们没有抓住要点。后来,在一次意外的操作中,找到了一个简单有效的方法来减少类库的膨胀。
(1)。打开要处理的类库,并输入继承关系中最复杂、最高级的对象(上级父类)。
2。修改对象中的任何方法或属性(即添加一个字符然后删除该字符)。
(3)。存退;
类库完全关闭,关闭所有和清除所有。
此时,可以看到类库的字节数,并发现类库的容量已恢复正常。
2。如何构建索引字段索引
视觉foxpro3.0不支持可变长度的关键词。但经过实验发现,在建立索引后,如果索引字段的长度不再变化,就可以建立备注字段的索引,但在建立索引时,必须注意索引的表达不能直接应用到备注字段名中,而且也略有变化。如果我们使用修剪()函数包装备注字段,我们可以成功地对备注字段进行索引。
三.索引的字符类型字段允许的最大宽度。
这在数据中没有解释。发现该索引的最大宽度为240个字符。
4。当对象(方法)中的参数太多时,最好使用属性数组而不是表单参数。
这种方法可以使主处理过程的逻辑更加清晰易读。
为了保证实质性的闭包,在主控制方法的对象中定义属性数组。为了确保可视闭包,也就是说,属性数组与主控件方法相同。
为了进一步增强主控制方法的可读性,可以只为参数的属性数组分配一个额外的方法。
5。如何定义对象中的属性数组
当定义的属性,你可以直接使用方括号给旅行的价值。例如,一个{ 5,9 },一个5行9列属性数组定义。
6。如何快速构建网格表
在程序中使用网格形式的程序员觉得创建这种表单的方式有点麻烦,特别是当表和项目的数量多,甚至害怕时,事实上,只要能够灵活地使用VFP表单生成器,就可以大大提高网格表单的生产效率。
这里假设是建立网格形式,TTT.DBF为处理对象,因为有很多领域,网格表文号,所以只有替代的使用方法和步骤如下:
1。只有两个领域建立自由表aa.dbf,让一个在TTT.DBF一场相关领域;
2。启动表单生成器,以向导的方式选择一对多窗体向导;
三.在多窗体向导操作的父表的指导下,以aa.dbf TTT.DBF为子表表格制作的基本模式。当选择一个数据库字段,字段的ttt.dbf选择未来的网格表的需要。
(4)。打开步骤3所生成的表单3,在窗体上剪切网格窗体,然后退出窗体;
打开需要在程序中使用网格表的表单,并将步骤4中的网格表复制到当前窗体。
在这一点上,一个符合要求的程序网格形式完成。不管一个网格形式有多大,你可以用这个方法在两分钟内使所需的网格形式。只有50场的手一般需要半个小时做一个网格表(也可能是错的)。很明显,较大的网格表,这种方法的效率更高。
7。通过避免在对象中浮动方法
浮动对象的所谓的方法就是让run方法没有在工作场所,任何限制变量,打开数据表,等等,它不影响其它的方法。在过去,教材中的教育原则是保存现场和恢复现场后的工作已经完成。VFP等数据库系统,所谓的活主要是指占用工作区,目前的磁盘目录,打开数据表和数据变量或对象可能被使用或被使用的特性。
因此,我们完全可以通过规避途径实现这一目标,下面是规避法律的基本步骤。
首先,这种方法的出发点是声明变量私有化,并在开始方法之前记录工作区域和磁盘目录。
查找并返回一个未使用的工作区,并在工作中打开一个必需的数据表;
(3)。完成该方法的工作(包括其他方法);
4。在该方法开始之前还原工作区域和工作磁盘目录;
5。退出这种方法。
从这些步骤中可以看出,回避的主要途径是单进单出。以数据表为例:当该方法退出时,同一方法打开的数据表必须关闭,对工作空间和磁盘目录有相同的想法,显然,这种方法占用更多内存,不适合DOS时代,对于Windows来说也不是问题。
几个一般对象方法8。必须要做的
以下是最常用的方法,但在VFP中没有可用的方法:
在磁盘上找到指定的数据库
file_dbc参数
私人FFF
FFF =装饰(file_dbc)
如果len(FFF)不指定数据库,它表明的是数据表,可都是免费的表,因此你不必打开数据库
返回T。
endif
if.not.file('fff)
等待Windows找不到您在这个目录中指定的数据库!
FFF = F.
其他的
开放式数据库FFF独家
FFF = T。
endif
返回FFF
在指定的(子)目录中找到指定的文件。
参数文件,文本文件名,提示信息:
私人所有
*像F *
FFF =装饰(文件)
fff1 = T。
if.not.file('fff)
如果Len(修剪(文本))> 0.5
如果消息内容为空,则不执行暂停显示。
等待窗口文本
endif
fff1 = F.
endif
返回fff1
查找和返回尚未使用的工作区域
私人所有
对于我= 1比10
aaa_m =别名(我)
如果len(TRIM(aaa_m))回我
endif
作为
返回0
建立指定的目录
参数,可怕的目录名
私人都喜欢F *
FFF =让图书馆+装饰(这个。path_fts)
+ foxtools.fll添加剂
FFF
*设置图书馆foxtools.fll添加剂
fff1 = F.
FFF =装饰(可怕的)
如果mkdir(FFF)= 0
对fff1 =成功。T.
endif
集库
返回fff1
9。快速查询备注字段
ATC()函数比at-clien快几倍()函数时,寻找一个完整的一个字段的文本搜索。
10。最近的匹配检索
在使用索引查找命令之前设置近集有时是有用的。此设置的意思是当查找失败,记录号定位在最近的位置,而不是在数据库端。例如,一个开放的日期字段的索引库,我们要浏览的记录在3月5日,但我们只知道在图书馆里有许多不连续的日期的记录,我们不知道图书馆里有3月5日的历史。如果设置在设置,当图书馆没有3月5日的记录,它将被放置在最近的3月6日或7日记录从3月5日,从而达到搜索和浏览的目的。
11。某类文件的检测
功能领域()可以检测到一个特定的文件是否存在,无法检测是否一个类文件存在,和系统功能的系统(2000)可以搜索一个类文件,只要参数文件名包含通配符。您也可以使用此方法确定的子目录是空的,只要文件名是由路径名和* *。
12。屏幕
当DOS命令在数据库环境下调用,执行命令后往往会破坏数据库中的环境存在的画面信息。当然,它可以节省屏幕解决,而不是通过使用DOS的输出重定向功能,使输出的信息将不会显示在屏幕上。例如,命令运行复制ABC。*:可以改变:
运行复制ABC。*:> ttt.txt
在这一点上,那就是要出口到屏幕上的信息可以转变为临时文件TTT。txt屏幕保持不变。
13。调用大尺寸外部程序
在FoxPro环境下,你可以使用运行()命令直接调用外部命令,但有时剩余内存不多,与外部程序是非常大的。有一个记忆经理FoxSWAP在FoxPro可以解决这个问题。命令调用的WP5可以写为:
运行 120 WPS
14。用包层方法更新数据
如果一个大的数据库需要定期更新数据,这是很好的删除旧的记录,添加新记录,因为包指挥大型数据库物理删除需要很长的时间。在这个时候,最好是使用盖,方法就是把新记录的内容在旧的记录。这个过程最好是通过组合分散指挥和收集指令。前者的作用是将记录的所有字段内容存储在一个数组变量中,后者的作用是将数组变量的内容存储在一个记录中,也就是说,内存变量用于将新记录的内容转移到旧记录中,并且内存操作显然比磁盘操作快得多。