在完成客户/服务器的设计工作之后,就可以开始构造并升迁一个本地原型。本地原型是应用程序的一种工作模式,它使用 Visual FoxPro 的表、视图和数据库来表示以后将放在远程服务器上的数据。可以借助“升迁向导”将这些数据库、表和视图从本地系统迁移到远程 SQL Server 或 Oracle® 服务器上。
本章内容要点:
在使用 Visual FoxPro 构造应用程序的原型时,可以充分利用可视化编程的各种工具,如表单、向导、生成器、设计器和项目管理器等,快速有效地开发出一个正常工作的应用程序。如果最终目标是使这个应用程序成为一个客户/服务器模式的程序,那么选择一个固定的原型进行程序开发可以取得事半功倍的效果。
通过建立快速的程序原型,不必访问远程服务器以在服务器上创建表和数据库,就可以在本地机上简单快捷地对应用程序的设计方案和本地结构进行精心调整。此外,还可以在一个规模较小的数据集上测试并调试应用程序,并对程序的用户界面做出相应的修改。由于程序的结构总是对系统要求较低,这样就避免了为测试程序原型而对远程数据进行的重建、重索引以及重连接等工作,从而节省了开发时间。
由于本地原型存放在本地 PC 机上,因而在应用程序开发周期的早期就可以向最终用户演示应用程序的工作模式。让用户尽早了解工作的进展有助于增强用户对程序开发的信心,相信设计者交付合格产品的能力。与此同时,还能在远程服务器上投入力量进行下一步的工作之前,倾听用户意见,掌握用户对程序用户界面以及报表等程序组件的反馈信息。
用户在看到、使用程序原型之后,会提出一些修改意见,并对程序中一些有待改进和完善的地方提出建议。设计者可以根据这些意见和建议,做出相应的修改,然后再次提交给用户,就这样不断的重复,直到双方都满意设计方案为止。这时,原型程序也就达到了为最终的客户/服务器应用程序奠定基础的目的。
可以将原型程序作为一个演示程序供用户使用,在进行下一步具体程序的实现工作
有助于成功地完成任务之前,允许他们对设计的工作模型进行试验。随着试验不断进行,他们对原型程序会越来越熟悉,因而能够成为进一步改进和完善程序过程中的良好伙伴。同时由于他们对程序的基本框架已经理解并掌握,因而对最终产品也会感到熟悉、满意。
初始工作模型不仅为最终用户适应和熟悉应用程序预留了时间,而且为公司内的职员和客户提供了用于设计和制定应用程序培训计划的框架。在交付最终的应用程序之前,甚至可用原型程序对用户进行培训,有助于最终实现客户/服务器应用程序。
在建立应用程序的本地原型时,可以从草图开始,也可以将一个已有的 Visual FoxPro 应用程序转换为客户/服务器应用程序。创建客户/服务器应用程序的本地原型与开发其他 Visual FoxPro 应用程序的主要差别在于使用本地视图和表来表示以后将要升迁的数据。
若要构造并升迁一个本地原型
当选择了此选项后,升迁向导将向选定的本地表复制到远程服务器上,然后重新定向本地视图以使用可用的远程数据。
有关创建视图的详细内容,请参阅第八章“创建视图”。有关创建表单,使用数据环境的详细内容,请参阅第九章“创建表单”。有关开发应用程序的详细内容,请参阅第二章“开发应用程序”。
Visual FoxPro 提供了两个升迁向导:“SQL Server 升迁向导”和“Oracle 升迁向导”。这两个升迁向导可以创建一个 SQL Server 数据库或 Oracle 数据库,实现 Visual FoxPro 数据库中各表的功能。还可以重定向 Visual FoxPro 视图,使其使用新建的远程数据而不是本地数据。利用“升迁向导”可以实现以下功能:
注释 尽管“升迁向导”只访问 SQL Server 或 Oracle 服务器,但是实际上可以为任何远程 ODBC 数据源创建客户/服务器应用程序。对于非 SQL Server 和非 Oracle 服务器,可以使用 SQL pass-through 函数创建远程表,然后使用 Visual FoxPro 来创建远程视图访问这些服务器上的表。有关使用 SQL pass-through 函数的详细内容,请参阅第二十一章“实现客户/服务器应用程序”。有关创建远程视图的详细内容,请参阅第八章“创建视图”。
在运行“升迁向导”之前,必须在客户和服务器端都做好准备。
在升迁之前,必须确保对服务器有必要的访问权限,并需要对数据库的大小做出估计,然后检查服务器是否有足够的磁盘空间。此外,升迁到多个磁盘或设备上还需要特殊的准备工作。
确保在服务器上有足够的磁盘空间。
注意 如果“升迁向导”遇到服务器上磁盘空间不足的问题,它将停止,并将未完成的数据库及所创建的所有设备遗留在服务器上。可以利用 SQL Server 管理工具清除这些设备、数据库和表。
为了运行“升迁向导”,必须在准备接收升迁的 SQL Server 上拥有足够的权限。拥有哪种权限取决于需要完成的任务。
有关服务器权限的详细内容,请参阅相关的服务器文档。
在创建一个新数据库时,“升迁向导”会要求您为数据库和日志选择设备,并要求给出数据库和设备的大小。
创建一个数据库时,可在一个或多个设备上预留固定大小的磁盘空间。数据库并不会用到全部的空间,指定数据库大小仅仅用来限制数据库的可增长规模,避免遇到磁盘空间不足的情况。
注释 可以在创建一个 SQL Server 数据库之后,增加它的大小。有关详细内容,请参阅 SQL Server 文档中有关 ALTER DATABASE 命令的说明。
若要估计数据库所需空间的大小,将要升迁的 Visual FoxPro .dbf 文件的大小,加上将增加的新的 SQL Server 数据库的大小,其和即为数据库空间的估算值。一般来讲,每兆字节的 Visual FoxPro 数据在 SQL Server 上需要至少 1.3 到 1.5 兆字节。
如果服务器上有足够的磁盘空间,不妨预留两倍于 Visual FoxPro 表的空间。这样就能确保“升迁向导”有足够的空间升迁数据库,并为未来的增长预留空间。如果希望以后添加大量数据到此数据库中,可以再多留一些空间。
SQL Server 的所有数据库和日志都放在设备上。设备是一个物理文件,同时又是一个存放数据库和日志的逻辑位置。在创建设备时,SQL Server 实际上创建了一个文件,因此需要保留一定数量的磁盘空间供其使用。
“升迁向导”可以显示现有 SQL Server 设备的自由空间大小,升迁时所选择设备的自由空间大小应大于或等于估计的数据库大小。
如果现有的设备都没有足够的自由空间,可以用“升迁向导”创建新设备。新设备的大小必须大于或等于估计的数据库大小。如果可能,应使设备占用的空间大于数据库占用的空间,这样以后可以继续扩展此数据库,或者将其他数据库或日志放在此设备上。
重要内容 设备大小不能修改,因此必须一开始就留出足够的空间。
在大多数情况下,“升迁向导”对 SQL Server 设备提供足够的控制权。但是,如果服务器有多个磁盘,或者想把数据库或日志放在多台设备上,那么可能需要在运行“升迁向导”之前创建设备。
如果服务器具有多个物理硬盘,您可能希望将数据库放在一个磁盘上,而数据库日志放在另一个磁盘上。这样,在某一磁盘损坏的情况下,还有可能对数据库进行恢复。
“升迁向导”允许您新建多台设备,但只能在一个物理磁盘上,而且是主数据库设备所在的磁盘上创建。
若要将数据库和日志放在不同的磁盘上,应确保在两个磁盘上的设备都足够大,必要时可创建新设备。然后再运行“升迁向导”。
SQL Server 允许数据库和日志分布在多台设备上。但是“升迁向导”只允许您为数据库指定一台设备,为日志指定另一台设备。
若要为数据库或日志指定多台设备,可以设定这些设备(而不是其他设备)为默认设备。然后运行“SQL Server 升迁向导”,并设定数据库或日志的设备为默认设备。
注释 如果新的 SQL Server 数据库或日志大小不足以占用所有的默认设备,SQL Server 将只使用能容纳数据库或日志的设备。
在升迁之前,必须能够通过 ODBC 数据源或命名连接访问 SQL Server。此外,在运行SQL Server “升迁向导”之前还必须备份 Visual FoxPro 数据库。
在新建远程数据库时,要确保 Visual FoxPro 数据库中已有一个 ODBC 数据源或命名连接可以访问 SQL Server,此数据库将升迁到此 SQL Server 上。如果没有选择一个命名连接或数据源,将不能使用“升迁向导”进行处理,所以在开始升迁过程之前,需要建立一个合适的数据源或命名连接。
有关创建命名连接的详细内容,请参阅第八章“创建视图”。若要创建 ODBC 数据源,可运行“ODBC 管理器”。有关设置 ODBC 数据源的详细内容,请参阅《安装指南》中的第一章“安装 Visual FoxPro”。
在升迁之前,最好能备份数据库(.dbc、.dct 和 .dcx 文件)。虽然“升迁向导”不修改 .dbf,但是它会对 .dbc 进行操作,例如,不时以表的形式直接打开 .dbc,或在创建新的远程视图时,通过重命名表或视图间接地打开 .dbc。如果在升迁前备份了数据库,就可以用原来的备份覆盖升迁之后的 .dbc、.dct 和 .dcx 文件,从而将数据库恢复到原来状态。
“升迁向导”会尝试以独占方式打开待升迁数据库中的所有表,如果其中有任何表已经以共享方式打开,“升迁向导”会将其关闭并以独占方式重新打开。以独占方式打开表可以避免其他用户修改正在导出的数据。如果有某一表不能以独占方式打开,“升迁向导”会显示相应的信息,并且此表不能被升迁。
在创建一个 ODBC 数据源并完成了客户端和服务器端两方面的准备工作之后,就可以开始升迁工作了。
若要启动“SQL Server 升迁向导”
可以在任何时候选择“取消”按钮,退出“升迁向导”。在选择“完成”按钮之前,向导不会对服务器执行任何操作。
选择“完成”按钮后,“升迁向导”开始将数据库迁移到服务器上。
“完成”按钮在提供了升迁所需的足够信息后即可使用。如果在所有向导指示步骤完成之前就选择了“完成”按钮,“升迁向导”将采用剩下步骤的默认设置。
“SQL Server 升迁向导”将 Visual FoxPro 数据库升迁到 SQL Server 上的整个过程是透明。本节将详细说明在选择“完成”按钮后,“SQL Server 升迁向导”如何导出数据,如何将 Visual FoxPro 对象映射为 SQL Server 对象。
“SQL Server 升迁向导”有两种方法导出数据。第一种方法是创建一个存储过程,进行多行数据的插入工作。这种方法的特点是速度很快,因为存储过程预先进行了编译并且执行速度很快。
但是存储过程不能接受变长二进制变量作为参数。如果要导出的数据存储在文本或图象数据类型的 SQL Server 表中,或者存储在拥有超过 250 个字段的表中,那么“SQL Server 升迁向导”将使用另一种导出数据的方法。这种方法为表的每一行数据创建一条 SQL INSERT 语句,然后再执行此语句。
如果“SQL Server 升迁向导”在使用 SQL INSERT 方法导出数据时遇到错误,并且错误数目大于表中记录数的 10% 或 100 条记录(取两者中的教大值),向导将取消对该表的导出操作,并将错误数存入错误报表中。但是已导出的服务器表不会被摘除,任何已成功导出的记录都将遗留在服务器表中。
为了将 Visual FoxPro 数据库升迁到服务器上,“SQL Server 升迁向导”将创建服务器对象,使其尽可能地完成 Visual FoxPro 数据库所能完成的工作。一些 Visual FoxPro 对象映射到服务器对象的方式是非常直接的:例如 Visual FoxPro 的数据库、表、字段、默认值和索引直接并且一对一地映射为 SQL Server 的数据库、表、字段、默认值和索引。
但是,不是所有的本地对象都直接映射到服务器对象。Visual FoxPro 的有效性规则和参照完整性是数据字典的一部分,是在引擎级实施的。而 SQL Server 的有效性规则和参照完整性不是数据字典的一部分,是通过与表绑定的代码实施的。这些差别以及“SQL Server 升迁向导”所作的一些设计规定,造成了 Visual FoxPro 数据字典不能直接映射为 SQL Server 的对应结构。
下表总结了 Visual FoxPro 与 SQL Server 之间的对象映射关系:
Visual FoxPro 对象 | SQL Server 对象 |
数据库 | 数据库 |
表 | 表 |
索引 | 索引 |
字段 | 字段 |
默认值 | 默认值 |
表的有效性规则 | SQL Server 存储过程,由 UPDATE 和 INSERT 触发器调用 |
字段有效性规则 | SQL Server 存储过程,由 UPDATE 和 INSERT 触发器调用 |
永久性关系(用于参照完整性约束) | 更新、插入和删除触发器 |
下节讨论 Visual FoxPro 对象如何映射为 SQL Server 对象。
将对象移植到一个数据源上时,“升迁向导”在服务器上创建命名对象。向导为需要新名称的对象添加前缀,因为在 Visual FoxPro 中没有对应的独立对象存在(如默认值和规则)。紧跟前缀后面的是表名,然后是字段名。这种命名约定可使得同类的所有对象具有相同的前缀,而且在用数据源管理工具查阅时它们也放在一起。在同一表上创建的对象在查阅时也是放在一起的。
一个 Visual FoxPro 数据库直接映射为一个 SQL Server 数据库。一个 Visual FoxPro 表除其数据字典以外可映射为一个 SQL Server 表。
数据库、表、索引以及字段名在升迁时如果违反了 SQL Server 的命名约定,就有可能被修改。SQL Server 名称的长度不能超过 30 个字符,而且第一个字符必须是字母或者符号“@”。其他可用字符包括数字、字母或者“$”、“#”以及“_”等,但不允许空格。“升迁向导”用“_”替换任何非法字符。
任何与 SQL Server 保留字相同的名称都将被赋予后缀“_”。例如,FROM 和 GROUP 成为 FROM_ 和 GROUP_。“升迁向导”同时还在以数字开头的对象名前加“_”。
“SQL Server 升迁向导”为每一个升迁的表所赋予的名称与其本地表名相同,除非该表的名称中包含空格或者是数据源的一个关键字。
如果选择“在表上创建远程视图”,那么“SQL Server 升迁向导”将创建远程视图,并且赋予原本地表中的大多数字段属性。
由“升迁向导”导出 Visual FoxPro 表时,字段名和数据类型自动翻译为 SQL Server 的相应字段。
Visual FoxPro 数据类型 与 SQL Server 数据类型的映射关系如下:
缩写 | Visual FoxPro 数据类型 | SQL Server 数据类型 |
C | 字符型 |
|
Y | 货币型 |
|
D | 日期型 |
|
T | 日期时间型 |
|
B | 双精度型 |
|
F | 浮点数型 |
|
G | 通用型 |
|
I | 整数型 |
|
L | 逻辑型 |
|
M | 备注型 |
|
M (二进制) | 二进制备注型 |
|
C (二进制) | 二进制字符型 |
|
N | 数值型 |
|
使用 Transact-SQL 时间戳数据类型可以建立时间戳列。在第四步骤:“匹配字段数据类型”中,如果为一个指定的表选择“时间戳列”复选框,“SQL Server 升迁向导”会为该表建立一个时间戳字段。
如果一个表中包含一个或者多个备注型(M)或图片型(P)字段,“SQL Server 升迁向导”在默认情况下,会为该表选择“时间戳列”复选框,同时在该表的升迁版本上建立一个时间戳字段。
使用 Transact-SQL IDENTITY 属性字段来建立标识列。
SQL Server 的索引和 Visual FoxPro 的索引非常类似。下表显示了 Visual FoxPro 索引类型如何转换为 SQL Server 索引类型:
索引类型转换
Visual FoxPro 索引类型 | SQL Server 4.x 索引类型 |
主索引 | 聚集唯一索引 |
候选索引 | 唯一索引 |
唯一索引,普通索引 | 非唯一索引 |
“SQL Server 升迁向导”将 Visual FoxPro 索引标识名作为 SQL Server 的索引名。如果标识名是服务器上的保留字,则向导在此标识名后添加“_”字符。
注释 SQL Server 不支持升序或降序索引,不允许在服务器索引中出现表达式。“SQL Server 升迁向导”在升迁索引时将 Visual FoxPro 表达式从索引表达式中移去,而只将字段名送入服务器。
一个 Visual FoxPro 默认表达式直接映射为单个 SQL Server 默认值。“SQL Server 升迁向导”会根据 Visual FoxPro 字段的默认表达式创建一个 SQL Server 默认值。如果默认值创建成功,则“SQL Server 升迁向导”将其与 SQL Server 字段相对应。有关字段的升迁报表会指出“SQL Server 升迁向导”是否成功地将 Visual FoxPro 表达式翻译成了 SQL Server Transact-SQL。有关翻译的详细内容,请参阅本章稍后的“表达式映射”。
尽管 SQL Server 与 Visual FoxPro 的默认值相似之处很多,但是两者的默认值在创建方式以及行为上仍然有所不同。SQL Server 的默认值是独立的对象,不依赖任何具体的字段或表。创建了一个默认值后,可以被多个不同的字段使用,或绑定到多个不同的字段上。
“SQL Server 升迁向导”命名默认值的规则是在表名和字段名前加前缀 Dflt_。例如,对于 Customer 表的 ordamt
字段,其默认值在服务器上可以取名为 Dflt_Customer_Ordamt
。如果在表名和字段名前加前缀之后,默认值的名称超过 30 个字符,则 Visual FoxPro 将截断超出的字符。
默认表达式为 0 的字段与一个名为 UW_ZeroDefault
的默认值绑定。如果两个或多个字段具有相同的非零默认表达式,“升迁向导”将创建两个具有不同名称的默认值,这两个值在功能上是相同的。
SQL Server 中的逻辑字段禁止 null 值;Visual FoxPro 的逻辑字段则允许。考虑到这种差别,无论是否选择了导出默认值,“SQL Server 升迁向导”都将自动创建默认值 UW_ZeroDefault
并将其与每一个导出的逻辑字段相绑定。如果不提供其他值,这个默认值将服务器字段的值设为 0(如果在 Visual FoxPro 中查看该字段,则为“假”(.F.) )。
如果本地 Visual FoxPro 表中包含一个逻辑字段,该逻辑字段的默认值为“真”(.T.),则“升迁向导”不将 UW_ZeroDefault
默认值与服务器表相绑定,相反,它创建一个默认值,设置该字段等于 1,并根据前面所述的命名约定为此默认值命名。
SQL Server 默认值与 Visual FoxPro 默认值的行为不同。有关详细内容,请参阅本章稍后的“默认值”。
SQL Server 触发器是与特定的 SQL Server 表相关联的一组 Transact-SQL 语句。如在步骤 8 中选择了升迁“有效性规则”和“关系”时,“升迁向导”就将 Visual FoxPro 字段级和记录级有效性规则以及永久性表关系转换为由 SQL Server 触发器调用的存储过程。每一个服务器触发器都可以包含一些代码,模仿有效性规则和参照完整性规则的功能。
注释 “升迁向导”不升迁 Visual FoxPro 触发器。
一个服务器表可以拥有三个触发器,分别对应用以修改表中数据的三条命令:UPDATE、INSERT 和 DELETE。在执行相关命令时,触发器自动执行。
下表说明了由 “SQL Server 升迁向导”创建的触发器。任何触发器都可能包含一些代码,模仿下面所列出的 Visual FoxPro 的部分或全部功能。
触发器 | 模仿的 Visual FoxPro 功能 |
UPDATE | 有效性规则(字段级和记录级有效性)
参照完整性 |
INSERT | 有效性规则(字段级和记录级有效性)
参照完整性(只用于子表触发器) |
DELETE (只用于父表) | 参照完整性 |
“SQL Server 升迁向导”在为服务器的触发器命名时,在该触发器所属的 SQL Server 表的表名前加上前缀,指明该触发器的类型。前缀“TrigU_
”用于 UPDATE 触发器,“TrigD
_”用于 DELETE 触发器,“TrigI
_”用于 INSERT 触发器。例如,Customer 表中的 UPDATE 触发器可以命名为 TrigU_Customer
。
“SQL Server 升迁向导”可以导出 Visual FoxPro 字段级和记录级有效性规则,转换为 SQL Server 上的存储过程。向导对字段级规则命名时在表名和字段名前加上前缀“vrf”(“validation rule, field”的缩写),vrf_customer_lname
就是一例。表的有效性规则是在表名前加前缀“vrt”(“validation rule, table”的缩写),如 vrt_customer。
“SQL Server 升迁向导”使用调用存储过程的触发器而不是 SQL Server 规则,来实施字段级有效性检查,因为 SQL Server 规则不允许您显示自定义的错误信息。有关 SQL Server 规则的详细内容,请参阅 SQL Server 文档中有关 CREATE RULE 命令的说明。
对于引擎级上实施的永久表关系,通过它们上面的 UPDATE、DELETE 和 INSERT 事件的触发器,Visual FoxPro 应用程序支持参照完整性。可以使用两种方法在 SQL 服务器上实现参照完整性的约束:
- 或者 -
当选择基于触发器的参照完整性时,“SQL Server 升迁向导”建立触发器,这些触发器包含一些用来复制 Visual FoxPro 参照完整性约束的 Transact-SQL 代码;如果选择执行的是声明形式的参照完整性,“SQL Server 升迁向导”会使用带有 CONSTRAINT 关键字的 ALTER TABLE 命令建立 SQL Server 约束。
在基于触发器的方法程序中,参照完整性是通过触发器中的 Transact-SQL 代码在 SQL Server 上实施的。可以使用触发器对 UPDATE、DELETE 和 INSERT 语句提供限制,同时级联由 DELETE 和 INSERT 语句引出的变化。
“SQL Server 升迁向导”通过估算 Visual FoxPro 触发器来创建 SQL Server 触发器,Visual FoxPro 触发器用来实施 Visual FoxPro 数据库中永久关系的参照完整性。下表列出在 Visual FoxPro 参照完整性约束和由“SQL Server 升迁向导”建立的 SQL Server 触发器之间的映射关系。
Visual FoxPro 参照完整性约束 SQL Server 触发器
UPDATE | 级联 | 级联 UPDATE 触发器 |
限定 | 限定 UPDATE 触发器 | |
忽略 | 不产生触发器 | |
DELETE | 级联 | 级联 DELETE 触发器 |
限定 | 限定 DELETE 触发器 | |
忽略 | 不产生触发器 | |
INSERT | 限定 | 限定 INSERT 触发器 |
忽略 | 不产生触发器 |
在参照完整性约束中,所使用的 Visual FoxPro 永久关系可以在一个 SQL 数据源上转变为四个触发器:其中的两个用于父表,另外两个用于子表。
注释 如果关系中只有一个表被升迁,或者在 Visual FoxPro 中参照完整性没有起作用,那么 Visual FoxPro 中的关系将不能导出。
父表
“SQL Server 升迁向导”所创建的 UPDATE 触发器既可以防止用户修改父表的主关键字,也可以对子表进行级联修改,具体情况取决于在 Visual FoxPro 中创建关系的类型。
“SQL Server 升迁向导”也可以创建一个 DELETE 触发器,防止用户删除一个与子记录相关的记录,或者让用户级联删除子记录,具体情况同样取决于 Visual FoxPro 中所创建的表之间关系的类型。
子表
“SQL Server 升迁向导”创建一个 UPDATE 触发器,防止用户对外部关键字进行修改,避免造成孤立的记录。类似地,还创建一个 INSERT 触发器,防止用户添加没有父记录的新记录。
自定义错误值
当违反了向导所建的触发器的参照完整性时,“SQL Server 升迁向导”将一个自定义错误值放入 @@ERROR 变量。“升迁向导”把潜在错误值定义为触发器的部分代码。在运行时刻返回的具体错误值依赖于用户试图进行的操作:更新、插入或删除。
下表列出了各操作生成的错误编码:
操作 | SQL Server 错误 |
违反有效性规则 | 44444 |
试图删除 | 44445 |
试图更新 | 44446 |
试图插入 | 44447 |
更新或插入语句影响了多行记录,语句被自动回滚 | 44448 |
如果选择了声明的参照完整性,“SQL Server 升迁向导”使用带有 CONSTRAINT 关键字的 ALTER TABLE 命令建立 SQL Server 约束。父表约束使用 PRIMARY KEY 关键字,子表约束使用 FOREIGN KEY 和 REFERENCES 关键字。在 RESTRICT,RESTRICT 级的更新上以及在 RESTRICT 级的删除上,支持声明的参照完整性。
可以使用 SQL Server 约束为 UPDATE、DELETE 和 INSERT 语句提供限制。
尽管 Visual FoxPro 和 Transact-SQL 的某些函数相同,但是大多数 Visual FoxPro 函数不被 SQL Server 所支持。“SQL Server 升迁向导”使用下面的表达式映射关系,尝试将字段级和记录级有效性规则以及默认值中的 Visual FoxPro 表达式转换为 Transact-SQL。
Visual FoxPro 表达式 | SQL Server 表达式 |
真 (.T.) | 1 |
假 (.F.) | 0 |
# | <> |
.AND. | AND |
.NOT. | NOT |
.NULL. | NULL |
.OR. | OR |
=< | <= |
=> | >= |
ASC( ) | ASCII( ) |
AT( ) | CHARINDEX( ) |
CDOW( ) | DATENAME(dw, ...) |
CHR( ) | CHAR( ) |
CMONTH( ) | DATENAME(mm, ...) |
CTOD( ) | CONVERT(datetime, ...) |
CTOT( ) | CONVERT(datetime, ...) |
DATE( ) | GETDATE( ) |
DATETIME( ) | GETDATE( ) |
DAY( ) | DATEPART(dd, ...) |
DOW( ) | DATEPART(dw, ...) |
DTOC( ) | CONVERT(varchar, ...) |
DTOR( ) | RADIANS( ) |
DTOT( ) | CONVERT(datetime, ...) |
HOUR( ) | DATEPART(hh, ...) |
LIKE( ) | PATINDEX( ) |
MINUTE( ) | DATEPART(mi, ...) |
MONTH( ) | DATEPART(mm, ...) |
MTON( ) | CONVERT(money, ...) |
NTOM( ) | CONVERT(float, ...) |
RTOD( ) | DEGREES( ) |
SUBSTR( ) | SUBSTRING( ) |
TTOC( ) | CONVERT(char, ...) |
TTOD( ) | CONVERT(datetime, ...) |
YEAR( ) | DATEPART(yy, ...) |
下面的表达式在 Visual FoxPro 和 SQL Server 中是一样的。
从 Visual FoxPro 直接映射到 SQL Server 上的表达式
CEILING( ) | LOG( ) | LOWER( ) |
LTRIM( ) | RIGHT( ) | RTRIM( ) |
SOUNDEX( ) | SPACE( ) | STR( ) |
STUFF( ) | UPPER( ) |
“SQL Server 升迁向导”在升迁过程中会创建一些表供自己使用。这些文件最后将从硬盘删除,除非遇到下列情况:
如果满足上述的任何一个条件,“升迁向导”就将创建一个项目(名为“报表”、“报表1”、“报表2”等等)和一个数据库(名为“升迁”、“升迁1”等等),此项目和数据库放在一个名为 UPSIZE 的子目录下,而此子目录放在用 SET DEFAULT 命令设定的 Visual FoxPro 工作目录下。向导在该数据库中添加用来生成升迁报表的各表、用以存储生成的 SQL 的表以及任一错误表。下表列出了在升迁过程中潜在创建的文件:
升迁过程中创建的本地表
文件用途 | 表名 | 内容 |
升迁报表 | Errors_uw | 升迁过程中生成的任何错误信息。 |
Fields_uw | 所有已升迁表的信息。 | |
Indexes_uw | 所有已升迁索引的信息。 | |
Misc_uw | 杂类升迁信息。 | |
Relations_uw | 所有存储在 Visual FoxPro 数据库中的参照完整性信息。 | |
Tables_uw | 数据库中所有待升迁表的信息。 | |
Views_uw | 被重定向以访问远程数据的本地视图的信息。 | |
脚本表 | SQL_uw | 由“升迁向导”生成的的包含所有 SQL 代码的一个备注字段。 |
数据导出错误表 | ExportErrors_table_name | 用于每一个在升迁过程中遇到错误的表。“升迁向导”生成一个表,其中包含未能成功导出的记录。 |
如果向导在处理过程中被取消,或者由于出错,向导中止,则在硬盘上不会留下任何表。
存储在本地硬盘上的脚本表含有全部由“升迁向导”生成的 SQL 代码,但是代码在服务器上能否正确执行并未经过检验。如果想使用此代码,最好的办法是查看此代码,将想要使用的部分复制下来,然后运行并调试这些代码,直至得到满意的结果为止。运行整个 SQL 脚本并不能代替运行“升迁向导”,因为向导还会执行一些额外操作,这些操作并不反映到生成的 SQL 代码中去。
现在可以在服务器上和 Visual FoxPro 应用程序中采取一些额外的步骤以保证应用程序和数据正确且运行正常。
也可以使用本节中提供的信息通过远程视图构造应用程序而不采用升迁方式。无论如何创建远程表,有一些步骤是必须采取的,这样才能保证客户/服务器应用程序工作正常。
可以通过下列操作完成对服务器的升迁过程:
在 Visual FoxPro 中可更新的远程表必须具有一个唯一索引。“升迁向导”可以导出已有的唯一索引,但是如果此索引不存在则向导不能创建。应确保从 Visual FoxPro 中编辑的表是可更新的。
新的 SQL Server 数据库及其对象会从 SQL Server 中接受一组默认的权限。为了方便用户访问他们所需要的对象,应对数据库设置权限。
新数据库的默认权限是只允许系统管理员和数据库拥有者对其进行访问。
可以用 SQL Server Security Manager 或系统过程 sp_adduser
和 sp_addgroup
添加新的用户和组。
有关添加用户和组的详细内容,请参阅 SQL Server Security Manager Help 和 Microsoft SQL Server Transact-SQL Reference 中有关 sp_adduser
和 sp_addgroup
的内容。
由“升迁向导”创建的所有对象,包括表、触发器以及默认值在初始时只能由数据库拥有者和系统管理员使用。无论是升迁到一个新数据库还是升迁到一个现有的数据库都是如此。如果改写已有的对象,则所有对象权限也相应被改写。
要对表授予权限,可使用 SQL Enterprise Manager 或者 GRANT 和 REVOKE 命令。有关设置对象权限的详细内容。请参阅 Microsoft SQL Server Administrator's Companion 中的“Managing Object Permissions”,或者 Microsoft SQL Server Transact-SQL Reference 中的 GRANT 和 REVOKE 命令。
使新数据库具有可恢复性可以在遇到意外的情况下避免工作成果受到损失。
每当一个数据库在 SQL Server 上建立起来,主数据库中的系统表就将添加一些新记录。转储主数据库可以帮助您制作数据备份,保留最近所做的修改。有关转储主数据库的详细内容,请参阅 Microsoft SQL Server Administrator's Companion 中的“Backing Up the master Database”一节,或者 Microsoft SQL Server Transact-SQL Reference 中的 DUMP 命令和“Dumping the master Database”。
应经常对数据库进行备份,从而在遇到严重系统问题时,可以恢复数据库。有关备份 SQL Server 数据库的详细内容,请参阅 What's New in SQL Server 6.5 中的“Database Maintenance Plan Wizards”和“Backup and Recovery”还有 Microsoft SQL Server Transact-SQL Reference 中的“Database Design and Backup Strategy”。
对一台设备进行镜像可以不间断地将一台 SQL Server 设备的信息复制到另一台设备上。这样,在遇到一台设备出问题时,另一台设备可用来恢复所有最新的事务信息。
如果预期在两次备份之间数据库会有很大改动,而且不能承担丢失这些改动信息所带来的损失,则可以考虑使用设备镜像。当设备位于不同磁盘上时,设备镜像是最保险的,因为如果两台设备位于同一磁盘上而且磁盘损坏,那么两台设备就可能同时损坏。
有关镜像设备的详细内容,请参阅 Microsoft SQL Server Administrator's Companion 中的“Mirroring a Database Device”、“About SQL Server Device Mirroring”和“Using SQL Server Mirroring”等节。
在将对象从 Visual FoxPro 转换到 SQL Server 上之后,可能需要对原来的 Visual FoxPro 数据库代码做一些修改,使其在新的 SQL Server 数据库上能够正常工作。
由“SQL Server 升迁向导”创建的视图不是参数化视图,因此是未经优化的。为了提高处理的效率,可对这些视图设置参数,仅下载需要的数据。有关为视图添加参数的详细内容,请参阅第八章“创建视图”。
Visual FoxPro 的一些函数不被 SQL Server 所支持。如果由“SQL Server 升迁向导”创建的远程视图所使用的函数不能映射为 Transact-SQL 的相应函数,则此视图不能工作。有关将 Visual FoxPro 表达式映射为 Transact-SQL 表达式的详细内容,请参阅本章前面的“表达式映射”一节。
“SQL Server 升迁向导”不能升迁 Visual FoxPro 的存储过程和触发器。如果您想创建 SQL Server 的存储过程和触发器,可以在服务器上使用 Transact-SQL 或在 Visual FoxPro 上使用 SQL pass-through 函数。有关使用 Transact-SQL 的详细内容,请参阅 SQL Server 的有关文档;有关使用 SQL pass-through 函数的详细内容,请参阅第二十一章“实现客户/服务器应用程序”。
在 Visual FoxPro 中,一些事件发生的顺序有所不同,这取决于应用程序是使用 SQL Server 数据还是 Visual FoxPro 数据。这些差别可能要求您对代码做一些调整。
Visual FoxPro 默认字段值在开始编辑一个新记录时出现。而由 SQL Server 默认值对象生成的默认值仅在记录被插入后才出现。因此需要修改这些依赖于在插入记录前就必须拥有值的代码,例如进行查找的代码。
在 Visual FoxPro 中,当焦点离开字段时,开始进行字段有效性检查。而编辑附加表中的 SQL Server 数据时,触发器和规则要到焦点离开记录时才引发。因此,如果记录有效性检查依赖于退出字段时所引发的字段有效性规则,那么您可能需要对此记录有效性规则进行修改。
升迁报表可以指出每一个 Visual FoxPro 表的有效性规则、字段有效性规则以及默认表达式是否已成功转换。如果某一默认表达式或有效性规则没有转换,就需要用 Transact-SQL 对其重写。
在 Visual FoxPro 中,也可以在表单一级进行有效性检查。但是,如果服务器数据不经表单就进行了修改,那么就不能进行此有效性检查,结果可能会导致无效数据的输入。
有关表达式转换的详细内容,请参阅本章前面的“表达式映射”一节。有关 Transact-SQL 函数的详细内容,请参阅 SQL Server 的有关文档。
Visual FoxPro 在访问 SQL Server 服务器上的表时,其内部使用开放式锁定方式。开放式锁定意味着只在编辑记录值或进行记录更新操作时记录行才被锁定,也就是说锁定时间很短。
SQL Server 使用的是开放式锁定而不是保守式锁定,因为在 SQL Server 上保守式锁定是由页面锁定提供的,需要一次锁定多条记录。尽管页面锁定可以防止其他用户修改正在编辑的记录,但它也同时阻止了其他用户访问同一(锁定)页面的其他记录。开放式锁定为 Visual FoxPro 客户/服务器应用程序提供了最佳的多用户访问方式。
可以用 SQL WhereType 属性来优化更新并控制如何处理更新冲突。有关控制更新冲突的详细内容,请参阅第八章“创建视图”。
“Oracle 升迁向导”和“SQL Server 升迁向导”的操作过程类似。 要了解具体每一步的操作指导,请参阅 “Oracle 升迁向导”要查找关于 Oracle 服务器的具体信息,请参阅自己的 Oracle 文档。
建立与 Oracle 服务器相联的命名连接或者 ODBC 数据源,同时完成了在客户机和服务器上一些必要的准备以后,可以开始升迁。
若要启动“Oracle 升迁向导”
任意时候都可以选择“取消”来退出向导,在没有选择“完成”之前,向导不会对服务器上进行任何操作。
当提供了升迁所需要的基本信息之后,就可以选择“完成”这一步。在没有逐步走完所有的向导步骤之前选择“完成”,“Oracle 升迁向导”会采用剩余步骤的默认值。
当选择“完成”之后,“Oracle 升迁向导”就开始将数据库导入到服务器上。