⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 定制vfp向导.txt

📁 Vfp 文档 一些经典编程文章 可供初学者学习编程时使用
💻 TXT
📖 第 1 页 / 共 2 页
字号:
      wbaCols[lnI, 7])
    wbaCols[lnI, 1] = This.SetColWidth(fsize(lcField), ;
      loColumn)
    * loColumn.Width = wbaCols[lnI, 1]
  endif not empty(lcField)
next lnI
 

最后我为我的生成器建立了GRIDMAIN.PRG (使用了BUILDERS\GRIDBLDR 中的GRIDMAIN.PRG 的办法) 并使它成为项目的主文件。该程序用SET CLASSLIB命令添加SFGRIDBLDR.VCX 到打开的类库中,这样它可以找到我们的SFGridBuilder 类。GRIDMAIN 也自动注册它自己到VFP BUILDER 表中(如果是直接运行该APP 文件)。

要查看该生成器的行为,建立并运行SFGRIDBLDR.APP 来作为grids生成器注册它。如果你在运行该APP后,观察观查BUILDER.DBF,你会发现它是"未注册的" ,原始的grid 生成器的 TYPE 字段由"GRID" 改成了"XGRID" 并在它后面为它自己添加了一条TYPE 字段为"GRID"的新记录。下一步,新建一个表单,拖动grid 到表单中,并调用生成器。新的生成器看起来与原来的没有任何区别,但是当你添加字段到表格时,你会发现字段宽度自动调整到了适当大小。 

创建一个更好的参照完整性生成器 

我有一小点关于VFP自身的参照完整性(RI)生成器的问题: 

当你单击确认按钮来保存修改后的RI 时,它两次(而不是一次)让你确认。不是我太自信,但是我相信取消按钮的用途是允许我们返回; 我单击确认按钮因为它是确认,因此我不需要一条 "你真的,真的确认你要这样做吗" 的确认对话框。 
在你压缩数据库前,你不能运行RI 生成器。 
我确实砂需要它备份我的当前的储存过程为一个叫做RISP.OLD的我总是要自己删除它的文件。 
生成的代码中至少有一处BUG ,应该用正确的功能来防止它。关于该BUG的细节,参见"VFP中的错误处理一文"。 
它生成的代码既多又缺少注释。要试着理解这些代码是做什么的是一个艰苦的过程,而且如果是在一个复杂的数据库中,RI 代码可能超过VFP 编译后的代码的64K 限制。如果你看过Jim Booth 和 Steve Sawyer写的 "Visual FoxPro 6.0应用程序开发的有效技术" 一书,你会有一个较好的快速,简洁的子程序来维护RI。Steve的 NEWRI 子程序是数据驱动的,因此它是在运行时而不是在生成时检查哪些规则需要强制执行。结果是清楚的,紧密而不是VFP RI生成器生成的大实用的代码。 
它所支持的规则仅是忽略、级联和限制。你所需要的其它选项又怎样呢,例如无效(设置子表的外部关键字为.NULL.) 或指定一个新值 (设置外部关键字为的默认值)? 
修正这些项相对容易些,因为我们有RI 生成器的源代码。我建立了SFRIBUILDR.APP,一个 VFP RIBUILDR.APP的替换物。我没有实现附加的规则 (上面提及的最后一项) 但是我处理了其它的所有项。我首先建立了SFRIBUILDR 项目(它在解压后的程序的主目录下的RI 目录中) 并添加了VFP的RIBUILDR.VCX(在VFP向导源程序所在目录下的BUILDERS\RIBUILDR 目录中)。

接着,我派生VFP RI生成器类到 SFRIBUILDR.VCX 类库中的SFRIBuildr。我忽视(overrode)了Load 方法以便在数据库中有被删除的记录时不会发生错误 (你可以参见我注释的已存在的代码)。我忽视了确认按钮的Click 方法,以便不出现确认对话框和不复制当前的储存过程到RISP.OLD中,并修复了生成的代码中的错误。同时,如果它检查到NEWRI.PRG 存在于你的系统中 (与SFRIBUILR.APP在同一目录),它会把该代码放入数据库的储存代码中而不会生成其它代码。这个修改需要一个新的方法 RIMakeNewTr用一个不同的名字建立触发器(__RI_Handler) 而不是原来的RI 生成器的生成的(__RI_<action>_<table>,如__RI_Delete_Customer)。因为这些方法中有大量的代码,在这里就不写出来了; 但是,如果你查看提供的源代码,你会看见我确实只注释了很少的代码行,并添加了很少的代码。

最后,我从BUILDERS\RIBUILDR目录中复制RIMAIN.PRG 到我的生成器所在的目录,添加它到项目中,并使它面为主程序。我修改了该程序所指向的类库,使它能找到我的VFP RI 生成器类的子类所在的类库 (SFRIBUILDR.VCX) 并自动注册该生成器到VFP BUILDER 表中(如果是直接运行该APP)。

生成并运行SFRIBUILDR.APP 导致该文件作为RI生成器注册取代了通常的RIBUILDR.APP。要看这一点,按以下步骤进行: 

移动本文附带的示例文件到WIZARDS\RI 目录。 
如果你有Steve的 NEWRI.PRG,将其复制到该目录。 
运行COPYDEMO.PRG。该程序将复制VFP TESTDATA 数据库到DATA 目录中,这样我们不会改动原始的数据库。 
运行 DELETETEST.PRG。这会演示一个VFP RI 生成器生成代码的流程。第一次浏览显示ALFKI 客户的几个订货,然后试着删除该客户。因为CUSTOMER 到 ORDERS 表间存在着级联删除,且ORDERS 到 ORDITEMS表间的规则为限制,该客户将不能被删除。但是,请注意错误对话框出现了六次(而不是你所希望的一次) ,然后另一个浏览显示该客户已被删除(CUST_ID 是 .NULL.)。 
因为我们已经把数据弄乱了,再一次运行COPYDEMO.PRG重新复制TESTDATA 数据库到DATA 目录中。 
以独占方式打开DATA\TESTDATA数据库。 
生成并运行SFRIBUILDR.APP 来注册它为RI 生成器。 
打开数据库设计器,选择修改参照完整性,然后在RI 生成器对话框中,单击确认按钮。注意没有出现确认对话框。选择修改储存过程并注意代码的不同(如果你有NEWRI.PRG,该代码会放入储存过程中; 否则,生成的RIDelete 和 RIUpdate 方法代码中的bug 已修正)。如果你有Steve 的 NEWRI.PRG,修改CUSTOMER 表,并注意各触发器方法的名字。同时,你不会看到RISP.OLD 文件了。 
再次运行DELETETEST.PRG。这一次,你只会看到一次错误信息且ALFKI 客户没有被删除。 
创建一个更好的升迁(Upsizing) 向导 

Jim Falino 在使用升迁向导时失败了,因此他创建了一个具有他所希望的行为的版本。 

向导在每一个具有至少一个数值,浮点,通用 或备注字段的表中,建立一个timestamp 字段。Jim 不希望向导自动建立任何timestamp 字段,因此他移去了该功能。 
向导为具有主关键字段的表自动建立一组索引。这在有时是令人满意的,Jim 决定在默认情况下不建立组索引,因此在建立主关键字时,他加入了NONCLUSTERED 子句。 
由于数据库对象名字在SQL Server 中必须唯一,对于具有非唯一名的东西不能升迁。例如,如果你为多个表的主关键字段建立了相同索引名的索引则你不能升迁关键字索引 (如使用"ID" 为每一个表的主关键字段)。Jim 的方案是重命名主关键字索引为UQ_<table name>,因为名字在在 SQL Server中是不重要的。 
可用的表的列表框滑有排序; 表出现的顺序是它们在DBC中的顺序。在一个拥有上百个表的DBC中,要找到一个特定的表是件痛苦的事。Jim 设置了SuperMover 对象的SortLeft 属性(用于指明左边的列表框是否需要排序) 为 .T. 
向导可以为DBC中的每一个表,用相同和定义建立一个远程视图。但是,但是它命名视图与原表同名,并重命名表为一个唯一名。由于有些人喜欢对视图使用命名约定(例如,在原表名前加上一个"V"),Jim 修改了向导中的这一点。 
Jim 修复了一个问题:向导有时会重新排列字段复合索引的顺序。 
VFP 数值型字段类型升迁为浮点型,即使 SQL Server 中有数值型数据类型也一样。这致使VFP中多于两位小数的数值型字段被截短,并且 VFP 数值字段没有小数点的会升迁为两位小数。 
Jim 的修改是让用户指定他们的要求; 你可以使用它们如果你的需要与之相同,或将他们作为模板使用以便你自己修改。 

创建一个更好用的WWW 搜索页向导 

在 "Visual FoxPro 6 企业开发" (Prima Tech,ISBN 0-7615-1381-7)一书中,Rod Paddock 和 John Petersen 描述了如何修改WWW 搜索页向导来取消只能输出5个字段到一个网页的局限。胜于修改向导,你会希望派生它们。要这样做,用我派生生成器类的相似的方法。WWW 搜索页向导的代码在VFP 向导源目录下的WIZARDS\WZINTNET 目录中。


--------------------------------------------------------------------------------

下一节 | 上一节 | 返回第一章 | 返回第一课 | 返回目录 | 返回主页

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -