VFP9中新的数据处理方式数据浏览器
- 格式:doc
- 大小:285.50 KB
- 文档页数:14
新的集成开发环境数据浏览器(Data Explorer)数据浏览器(Data Explorer)众所周知,Visual FoxPro有很强的数据操控功能。
Visual FoxPro 9将这种功能在客户端/服务器模式(C/S模式)的开发环境下表现得淋漓致尽。
它新增了一个名为数据浏览器的工具让基于C/S模式的开发变得更方便。
数据浏览器是一个新工具,你可以在任务面板管理器中找到它,要激活数据浏览器,你先要从Visual FoxPro的“tools”菜单中打开任务面板管理器,然后单击任务面板管理器中的“>>”按钮,这样会弹出一些未显示的面板列表(参见图5),然后单击“Data Explorer”项。
图5. 通过单击“>>”按钮可以弹出更多的面板列表现在你就可以通过它连接到外部数据库,并在你的计算机上浏览远程数据库了。
图6展示了用数据浏览器来分析一个名为“Master”数据库的详细信息。
你可以在图6中相应的数据表上单击右键,并单击弹出的快捷菜单中的“Run Query”项来查询这个表中的记录。
这时会打开一个新的对话框(参见图7),你可以在这个对话框中输入SQL语句来执行查询。
图6.用数据浏览器来显示Master数据库的详细信息图7. 查询对话框可以用来输入SQL语句,并显示查询结果数据浏览器在以前的Visual FoxPro版本中就非常需要,感谢Microsoft公司终于在版本9中加入了这项功能。
方便的代码查错Visual FoxPro 9对它的程序编辑窗口也做了很大的增强。
当FoxPro在代码中发现一处语法错误时,它会为相应代码画上下划线。
这节约了开发者的纠正BUG的时间,并且不必非要等到编译完成才发现错误。
VFP9的IDE=更高的效率尽管本文描述的新增功能不是太多,但Visual FoxPro9的集成开发环境确实进步了不少。
改进后的程序编辑窗口让你的源代码中的BUG更少,方便的字体设置能让你的项目更一目了然,并且新增加的数据浏览器让C/S开发变得更简单。
Visual FoxPro 9中新的数据处理方式(2)更好的关联支持新版本中的UPDATE语句和DELETE语句支持关联。
这样,一条语句可以引用不同的表,如下所示:这个DELETE语句删除mfg表中所有不再生产的产品。
另一个关联UPDATE语句示例如下:这条UPDATE语句将零售产品的价格打了九折。
可能你会问:它支持子查询吗?当然支持。
但使用的时候要格外小心。
因为如果子查询没有返回任何记录,那将会返回一个值为NULL的空记录。
而这恰恰不是你所希望得到的结果。
如下所示:这条UPDATE语句的作用与上条基本相似,但如果子查询中的产品没有找到的话,那unitprice将被置为NULL。
视图与查询设计器尽管新版本增强了子查询功能,但不幸的是在视图与查询设计器中并不支持这种增强功能。
并且由于SQL中的IN子句中的元素数目取消了硬编码的限制,但视图与查询设计器中并不知道,因此如果你使用设计器,那IN子句还是只支持24个元素。
增强的UNION操作符由于联结的数量没有了硬编码的限制,你可以在INSERT INTO子句的结果集中使用UNION。
也可以在使用UNION的同时使用ORDER BY子句。
性能不管你是访问远程数据还是依赖于它强大的本地数据库引擎,Visual FoxPro始终将性能考虑在第一位。
Visual FoxPro 9进一步地增强了数据引擎的功能。
二进制索引这种新型的索引使用方法如下:INDEX ON DELETED() TAG DELETED BINARY这种索引能与任何非空的逻辑表达式一起使用。
除此之外,FOR表达式、ASCENDING、DESCENDING、UNIQUE或CANDIDATE关键字不能与它一起使用。
二进制索引并不支持SET ORDER TO命令,而且INDEX ON命令会将当前的order设为0。
但你可在Seek语句中使用二进制索引。
二进制索引最大的优势在于它的索引文件大小。
以一个包含800万条记录的表为例,它的二进制索引文件的大小差不多为表大小的三十分之一。
尺寸越小意味着在执行APPEND和REPLACE操作时I/O处理速度越快,但遗憾的是所有的Rushmore优化技术目前都还不支持二进制索引。
如果SQL语句返回的记录起过表中总记录的三分之一的话,那Rushmore将得到很好的发挥(当所有的记录都命中的话会提高92%的速度)。
如果SQL语句返回的记录低于总记录的三分之一,那Rushmore将变得很慢(如果没有记录命中的话会降低两倍的速度)。
在Visual FoxPro 9中,将DELETE语句设置为二进制索引是一种增强性能的简单方法。
但要注意版本的问题,因为以前的版本并不支持这种新的索引方式。
Rushmore优化技术新版本中有使用了大量的Rushmore优化技术,例如对TOP N[PERCENT]作了优化,这样便能提供更好的性能。
它一般与ORDER BY子句配合使用,返回前N个或者前百分比数目的记录。
在Visaul FoxPro 9中它减少了内排序操作和文件I/O操作,使得执行这种类型的语句占用更少的内存,并且正如此语句所言,它只返回确切的前N个记录。
在以前的版本中,如果要统计一个班级总分排在前十名的学生,但中间存在并列名次的话,那结果会返回多于10个的记录。
在适当的情况下,Visual FoxPro 9将在FOR DELETED()子句和FOR NOT DELETED()子句中使用过滤索引来对MIN()和MAX()这两个聚集函数进行优化,可以提高MIN()和MAX()的计算速度。
如果LIKE模糊查询语句中的条件以“%”为结尾,那查询速度也将得到很大提高(请注意,“%”只能出现在查询条件的结尾,而不能出现在其它地方,否则优化无效)。
这种优化的结果等同于普通WHERE子句查询的速度。
更多的智能索引技术Visual FoxPro 9比以前的版本更智能化,它充分地让索引获得Rushmore的优化技术,如下所示:以上语句自动对NOT DELETED()和DELETED()条件进行优化,不用你添加一条INDEX ON NOT DELETED()来实现。
这里有个特例,就是当索引过过滤表达式采用了FOR NOT DELETED()作为Rushmore 的优化,并且SET DELETED设为ON的话,那就无须为NOT DELETED()作优化新的数据处理方式Visual FoxPro 9中新的数据处理方式(3)命令和函数一些新的命令和函数得到扩展,能够更好地控制Visual FoxPro将读取或写入数据到磁盘中去。
数据访问与提交的细粒度控制在Visual FoxPro中,SET REFRESH命令后的第二个参数控制当前内存中数据刷新到磁盘中的间隔时间,原来的版本只能以整数作为最小单位,但现在可以为小数。
你还可以将它指定为“?1”,这样可以强迫Visual FoxPro每次只从硬盘中读取数据,从而降低数据丢失的风险,并且这个时间的最小值可以设为“.001”。
如果你将这个值设得过低的话,可能会降低性能,特别是当请求增多,或是跨网络存取数据库时尤其如此,因此要小心谨慎地使用它。
SYS(1104)函数用来清理程序与数据的内存缓冲区,以及数据表的缓冲区。
在Visual FoxPro 9中,SYS(1104)的第二个参数用来指定要清理的工作区或者别名,当一个应用打开了很多表时,如果调用SYS(1104),那清理所有的表缓冲区将会很耗时,有了这样的一个参数可以对它进行更好的控制,从而加快系统的响应速度。
FLUSH命令系列可以将对于表、索引、文件的的有修改全部回写到磁盘中去,在Visual FoxPro 9中,FLUSH命令被扩展为两个步骤:先指定要刷新的区域,然后调用FlushFileBuffers 函数进行刷新。
尽管你可以通过指定要刷新的文件名、工作区或者表的别名来精细地控制回写的粒度,但有时Visual FoxPro 9回写数据到磁盘后,操作系统仍然不会真正地回写,而是将它继续保留在系统缓冲区中,这时你可以用FORCE关键字强制将系统缓冲区的内容回写到磁盘中。
以下是FLUSH命令的一些用法:在以前的版本中,如果你使用SELECT语句的话,那么数据全部将从磁盘中取得。
这意味着如果你想查询一些保存在表缓冲区中的未回写的数据的话,你必须编写一个额外的过程来完成这个功能。
现在的版本通过使用SET SQLBUFFERING和SELECT ... WITH(Buffering =<表达式>)使得你可以方便地控制数据到底是从磁盘中取得还是从表缓冲区中获得,如下所示:请注意每个表都要给出一个相应的WITH BUFFERING子句,如果不指定的话,Visual FoxPro 9将使用SET SQLBUFFERING中指定的值(缺省为 .f.)。
这是要提醒你的是只有Visual FoxPro9本地数据才支持缓冲,如果你使用其他的诸如SQL Server等后端数据库做为数据源的话则存在缓冲管理。
CAST()函数新的CAST()函数模仿的是SQL Server的一个同名函数。
它可以在SQL语句中使用,也可以在普通命令中使用。
如果在SQL语句中使用它的话,那你的SQL代码更遵循于TSQL规范。
正如它的名字所指示的那样,这个函数将一个数据类型转化为另一个数据类型。
SQL语句中使用CAST()函数的语法如下:ICASE()函数另一个名为ICASE()的函数模仿了TSQL的CASE分支。
它有点类似于IIF()函数,但它的有价值之处在于它不像IIF()函数那样会形成丑陋并且冗长的代码。
ICASE()函数需要指定相应的“条件/结果”参数对才能工作。
第一个参数是条件表达式,如果条件表达式为True的话,那第二个参数就会执行;如果条件表达式为False的话,那第二个参数就会被忽略,转而执行下一个条件/结果参数对。
如果参数配对错误,那么系统会报#11错误。
以下是ICASE()函数的使用示例:ICASE()中最多能允许100个条件/结果参数对。
SYS(3092):输出到文件这个新的SYS()函数要与SYS(3054)函数一起协同工作,你可以用SYS(3092)函数为SYS(3054)函数的输出指定一个文件名,于是结果将输出到这个指定文件中去。
以下示例解释了如何将这两个函数结合使用:如果你在SYS(3054)的第三个参数不指定具体的变量名,那结果将输出到当前的窗口中去。
Visual FoxPro 9中新的数据处理方式(4)新的数据类型为了更好地与SQL Server兼容,Visual FoxPro 9增加了三个新数据类型:VarChar、VarBinary和BLOB。