工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VFP > 正文
Visual FoxPro 9中新的数据处理方式
[文章信息]
作者:罗小虎编译
时间:2004-11-22
出处:天极网
责任编辑:方舟
[文章导读]
Visual FoxPro 9.0与以前的版本相比,在数据引擎上做了很大的改进
advertisement
热点推荐
· 真没想到VB也可以这样用之指针技术
· 禁止QQ登录的方法
· 给你的XML文件做个数字签名
· ImageReady制作“焰火”小动画
· Java加密和数字签名编程快速入门
[正文]

上一页  1 2 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命令的一些用法:

FLUSH "c:\data\customers.dbf"
FLUSH "c:\data\customers.dbf" FORCE
FLUSH IN 1 FORCE
FLUSH IN customer FORCE
FLUSH "c:\test.txt" FORCE
FLUSH FORCE

  在以前的版本中,如果你使用SELECT语句的话,那么数据全部将从磁盘中取得。这意味着如果你想查询一些保存在表缓冲区中的未回写的数据的话,你必须编写一个额外的过程来完成这个功能。现在的版本通过使用SET SQLBUFFERING和SELECT ... WITH(Buffering =<表达式>)使得你可以方便地控制数据到底是从磁盘中取得还是从表缓冲区中获得,如下所示:

SELECT * FROM Customer WITH (BUFFERING = .t.)
SELECT * FROM Orders WITH (BUFFERING = lUseBuffer)
SELECT DISTINCT c.city, o.shipcity ;
FROM customers C WITH (BUFFERING=.T.) ;
JOIN orders O WITH (BUFFERING=.T.) ;
ON c.customerID = o.customerID

  请注意每个表都要给出一个相应的WITH BUFFERING子句,如果不指定的话,Visual FoxPro 9将使用SET SQLBUFFERING中指定的值(缺省为 .f.)。

  这是要提醒你的是只有Visual FoxPro 9本地数据才支持缓冲,如果你使用其他的诸如SQL Server等后端数据库做为数据源的话则存在缓冲管理。

  CAST()函数

  新的CAST()函数模仿的是SQL Server的一个同名函数。它可以在SQL语句中使用,也可以在普通命令中使用。如果在SQL语句中使用它的话,那你的SQL代码更遵循于TSQL规范。正如它的名字所指示的那样,这个函数将一个数据类型转化为另一个数据类型。

  SQL语句中使用CAST()函数的语法如下:

SELECT CustomerID, ;
CAST(nAmount*nRate AS N(8,2)) ;
FROM SALES
SELECT CustomerID, ;
CAST(nAmount*nRate AS B NOT NULL) ;
FROM SALES
SELECT CustomerID, ;
CAST(nAmount*nRate AS C(10)) ;
FROM SALES
SELECT foo.*, ;
CAST(NULL as I) AS IntegerField ;
FROM foo

  ICASE()函数

  另一个名为ICASE()的函数模仿了TSQL的CASE分支。它有点类似于IIF()函数,但它的有价值之处在于它不像IIF()函数那样会形成丑陋并且冗长的代码。

  ICASE()函数需要指定相应的“条件/结果”参数对才能工作。第一个参数是条件表达式,如果条件表达式为True的话,那第二个参数就会执行;如果条件表达式为False的话,那第二个参数就会被忽略,转而执行下一个条件/结果参数对。如果参数配对错误,那么系统会报#11错误。

  以下是ICASE()函数的使用示例:

nHour = HOUR(DATETIME())
? ICASE( nHour = 8, "breakfast" , ;
nHour = 10, "caffeine" , ;
nHour = 12, "lunch" , ;
nHour = 15, "caffeine" , ;
nHour = 18, "dinner" , ;
"snack" ;
)

  ICASE()中最多能允许100个条件/结果参数对。

  SYS(3092):输出到文件

  这个新的SYS()函数要与SYS(3054)函数一起协同工作,你可以用SYS(3092)函数为SYS(3054)函数的输出指定一个文件名,于是结果将输出到这个指定文件中去。

  以下示例解释了如何将这两个函数结合使用:

SYS(3054,12,"dummyVar")
SYS(3092,"ShowPlan.txt")
OPEN DATABASE HOME(2)+"Northwind\Northwind"
SELECT * ;
FROM Customers INTO CURSOR temp1
SELECT * ;
FROM summary_of_sales_by_year ;
INTO CURSOR temp2
SYS(3092,"")
CLOSE DATA ALL
MODIFY FILE Showplan.txt NOWAIT

  如果你在SYS(3054)的第三个参数不指定具体的变量名,那结果将输出到当前的窗口中去。


上一页  1 2 3  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • VFP中状态栏控件的使用说明
  • VFP智能感应的二次开发
  • VFP中多条件数据查询程序的实现
  • VFP应用程序多媒体徽标的实现
  • VFP 6.0网络编程应注意的问题
  • 民营家电商排队造手机 设备商全面杀入
  • 英特尔澄清杨旭任职传闻 官方没宣布此消息
  • 国资委河北密制联通拆分方案
  • 垃圾邮件害人害企害国 清除垃圾邮件不手软
  • 中兴携手阿尔卡特 全球逐鹿CDMA
  • 用友总裁王文京:誓将ERP变成“大众消费”
  • 香港消费者委员会:数码相机最贵未必最好
  • 外电称中兴正评估西门子手机业务 或能并购
  • Advertisement