将 Visual Foxpro 6 应用程序转换为 Visual Foxpro 9 是否有任何问题?或者这是直截了当的?
在此过程中我应该注意哪些问题?
将 Visual Foxpro 6 应用程序转换为 Visual Foxpro 9 是否有任何问题?或者这是直截了当的?
在此过程中我应该注意哪些问题?
是的...取决于您项目中的各种元素。我目前在 VFP9 SP1 和 VFP9 SP2 中都有应用程序(使用 HotFix3 进行报告)
使用旧格式 SQL 查询在 VFP9 下运行 HELP 的一些问题
SET ENGINE BEHAVIOR 70 您可能希望继续使用 70。8 和 9 中的一些增强功能强制使用了一个奇妙的技巧,该技巧在惰性分组子句中的早期查询中使用...仅按您关心的少数列分组,尤其是当加入一个您知道无论如何总是具有相同值的查找表。在 8 和 9 中,它要求您通过所有非聚合函数来限定组......在这种情况下,您可能只需将那些“常量”列更改为 MAX(SomeField) 作为 SomeField。如果您的组无论如何基于 ID 密钥,则最大值永远不会改变。
查询中已知的其他问题与 SELECT SUM() 有关。如果您进行了查询,并且没有与查询匹配的记录,SUM() 列将返回为 NULL,当您希望得到一个数字时,您会得到一个意外的数据类型。一个快速的方法是总是添加一个 COUNT(*) 作为 ActualRecords ,它总是会返回一个数字。然后,您可以检查“Result.ActualRecords = 0”是否会通知用户、中止报告等,否则继续。
报告显然是从 6 增强的,并且具有一些非常好的功能,特别是多链接表报告区域,而无需执行“打印时间”和在某些条件下重叠控制。这对于您希望在最终报告中使用的多相关表非常有用。
按问题对 SQL SUM() 进行一次更新。我发现如果你做一个
选择 NVL( SUM( 不管 ), 0 ) 作为 FinalColumn,如果您遇到没有符合条件的记录的总和,则 NVL() 将采用该空值并将其强制为零,从而防止随后的 NULL 问题......同样,适用于 MIN()、MAX()、AVG() 等。
那些只是瞪着我的一些大的……
我会说它一般来说是相当无痛的。正如 DRapp 所提到的,您需要查看所有 SQL-SELECT 语句以权衡修改 GROUP BY 子句的利弊,或者是否更容易使用 SET ENGINEBEHAVIOUR。使用 SET REPORTBEHAVIOUR 可以使报告像 VFP6 一样工作。
当您打开 VFP6 没有的 DBF 时,VFP9 还会进行一些表结构检查。结果,您可能会发现在 VFP9 中打开 DBF 文件会引发错误 2065,因为标头记录数不等于实际记录数,而在早期版本中它们可以正常工作。可以使用 SET TABLEVALIDATE 命令控制此行为。
本周我已经处理了几个 VFP 6 应用程序问题,它们令人沮丧,因为 VFP 9 SP2 可以轻松解决这些问题。
另一件需要注意的事情是您的数据是否由 VFP 6 ODBC 驱动程序访问。如果您使用在 VFP 7 到 VFP 9 中实现的任何新数据库功能(如数据库事件)或新数据类型(如 varchar),您的数据将被转换为 ODBC 驱动程序无法处理的格式。而是使用新的 VFP OLE DB 驱动程序,并且某些工具无法处理 OLE DB 功能。
您会发现新的报表设计器方式更强大,但用于渲染的 GDI+ 将需要对报表进行一些字段大小调整以消除溢出星。正如 Alan 所说,您可以使用 SET REPORTBEHAVIOR 来避免这种情况,但您确实会想要利用报告预览功能。
您可能会遇到的另一件事是 AFIELDS() 命令在数组中创建更多元素。因此,您可能需要调整一些代码来处理创建的数组中的其他行。
如果您遇到任何问题,请在此处发布,我们将为您提供帮助。
里克·舒默
这里已经有很多好的答案了。最近转换了一个 vfp6 应用程序,我想说这个过程相对轻松,特别是使用 vfp9 的编辑器等带来的好处。
没有指出一项...检查所有报告,并确保“保存打印机环境”报告选项已关闭,除非列出的打印机确实是您想要硬编码到报告文件中的打印机。
我在将源升级到 VFP9 时遇到了一些问题。不过,它们中的大多数都相当小。
您需要做的第一件事是查看 VFP7、VFP8 和 VFP9 的新增功能文档。我知道这看起来很痛苦,但它应该是您升级项目时的第一站。VFP6 及更高版本的文档可在MSDN上找到。
许多新的属性和方法已添加到类中。如果其中之一与自定义属性/方法发生冲突,您将遇到错误。
此外,您还需要了解Vista UAC 要求以及如何处理它们。使用 VFP8 或更低版本编译的程序以“兼容”模式执行。VFP9 程序使用 Vista 应用程序清单编译,这意味着应用程序清单中的 requestedExecutionLevel 设置为 asInvoker。VFP8 及以下版本不包含在清单中(或根本不包含清单),因此是兼容模式。
这意味着在 Vista 上运行程序时,有几件事会失败或导致错误。
您可以选择更新 Application Manifest,但我不一定会推荐它,除非您的程序绝对需要管理权限。
最后,VFP9 SP2 修复了许多 Vista 的不兼容问题——一些专门针对 Aero的问题。因此,如果您要使用 VFP9,请务必使用 Service Pack 2。