Visual FoxPro 9中新的数据处理方式

来源:天极网 作者:罗小虎编译 2007-10-17 出处:pcdog.com

sql server  xml  操作系统  多线程  模糊查询  
上一页 1 2 3 
新的数据类型

  为了更好地与SQL Server兼容,Visual FoxPro 9增加了三个新数据类型:VarChar、VarBinary和BLOB。这些数据类型可以在本地数据库中作为字段类型,也可由CAST()函数创建或者由远程数据取得。

  VarChar

  它是一种字符型数据类型,但不像普通字符串那样长度不够的时候会以空格被补齐,而是将其截取。这有点类似于SQL Server中的SET ANSI_PADDING ON命令。如果VarChar中本身有空格的话则不会被截取。假如在一个表达式中将VarChar和Character两种数据类型混合计算,那结果会是VarChar类型。

  VarChar在Visual FoxPro中是一个定长域,它的最大长度限定为255个字符。但在SQL Server中,一个VarChar域的最大长度可以达到8060字节。

  VarBinary

  VarBinary与VarChar有些类似,如果没有达到最大长度的话,多余的域不会被填充,而是被截取。但它们的本质区别在于FoxPro不会为VarBinary类型作任何代码页的转换。以下是这两种数据类型的比较:

Visual FoxPro 9中新的数据处理方式

  BLOB

  BLOB数据类型没有固定的长度限制,与Memo类型有些相似。它被存储在以.FPT结尾的文件中,被.DBF文件引用。BLOB字段与Memo字段有相同的限定条件,并且他们都不支持索引。

  与VarBinary数据类型一样,Visual FoxPro 9不会将BLOB类型作代码页转换,而是保持它原始的二进制格式。

  BLOB数据类型的设计意图旨在取代最初的Gerneral字段。如果图形或者其它一些媒体类型以BLOB的格式存储,可用Image控件的PictureVal属性对它们进行浏览。

  MEMO与BLOB类型的数据不能直接修改,如果直接修改的话,那只会显示它们的16进制的映像。

  在以前的版本中,Visual FoxPro在建表语句CREATE TABLE创建字段类型时,一般用字段名称的第一个字母来取代。但随着数据类型的增多,像Character和Currency这两种字段类型如果采用第一个字母的简写方式的话会导致同名冲突。现在的版本可以同时支持字段类型的全称、全称的简写、第一个大写字母等多种方式,表1列出了所有的数据类型。

  表1: 下面是FoxPro所有的数据类型的全称和字母缩写。

数据类型 全称 字母缩写
Character Char, Character C
Date Date D
DateTime Datetime T
Numeric Num, Number N
Floating Float F
Integer Int, Integer I
Double Double B
Currency Currency Y
Logical Logical L
Memo Memo M
General General G
Picture Picture P
VarChar Varchar V
VarBinary Varbinary Q
BLOB Blob W

  与新引进的二进制索引一样,如果要使用新版本中的数据类型,那你必须升级到Visual FoxPro 9。否则就不能使用这些新的数据类型。

  远程数据

  Visual FoxPro以前的版本对远程数据有很强大的支持,但新版本中为操作及取得远程数据提供了更强大的控制功能。

  事务和连接

  一个名为DisconnectRoolBack的新属性被加入到了新版本,当事务处于挂起状态或连接断开时可以用它来将事务回滚。SQLSetProp、SQLGetProp、DBSetProp和DBGetProp函数都支持这个新属性。

  SQLIdleDisconnect()是一个新增加的函数,它可用来临时地终断一个连接。在大多数情况下,它通过一个IdleTimeOut的属性来控制连接超时的时间。但在多线程运行环境中是不允许线程处于空闲状态的,在这种情况下调用此函数将真正释放这个连接。

  游标处理

  通过调用CursorGetProp()函数可以取得两个新的属性:RecordsFetched和FetchlsComplete。这些属性能让你知道目前已经处理了多少条记录,以及什么时候可以将所有的记录处理完。

  RecordsFetched的值不会影响游标中的记录数目。并且如果在查询中设置了过滤表达式的话,那么过滤表达示将会被忽略掉。
如果你想在查询或更新的SQL语句中知道实际处理记录的数目,那可以调用SQLEXEC()和SQLMORERSULTS()函数,并通过一个名为aCountInfo的二维数组作为它们的参数,当函数调用后,此二维数组将包含表别名以及实际处理记录的数目。

  对CursorAdapter和XMLAdapter的增强

  关于对CursorAdapter和XMLAdapter的增强足以用长篇大论来描述。但限于篇幅,我们只描述一些显著增强功能。

  CursorAdapter作了很多的改动,使得它现在看上去像一个远程视图。这些增强如下:

  · 支持时间戳域。这允许UPDATE或DELETE语句可以在WHERE条件中以时间戳作为条件进行数据更新。

  · 支持自动更新。这项特性可以使得当使用INSERT或UPDATE进行远程数据更新时,CursorAdapter能够自动地刷新。当你使用自动序号字段、缺省字段或时间戳时这项特性变得非常有用。

  · 根据你的需要进行记录刷新。CursorAdapter中添加了一些新的属性和事件使得你能及时地刷新本地或远程视图,其功能与REFRESH()类似。

  此外,CursorAdapter还增加了一些属性用来支持DEFAULT和CHECK约束,并且可以将远程数据映射到新的VarChar和VarBinary数据类型上。

  XMLAdapter作了如下改进:

  · 层次型XML结构支持

  · XPath表达式支持

  · XML编码与解码的增强

  最后结论

  在本文中,你已经领略到了新版本数据引擎发生的本质改变。同时新版本还兼顾了向后兼容性,以及提供了方便的升级步骤,使得从版本8升级到版本9对用户而言是一个透明的过程。只要你升级到了版本9,你就能享受到这种巨大的优越性,并且无需改变你的原有代码。它让你的程序建立在一个强兼容性、强大功能以及高可维护性的基础之上。

上一页 1 2 3 
上一篇:VFP表跟踪日志的实现方法
下一篇:数据库应用程序需注意的问题