我们总是梦想着对象化(十)

2021-08-16 11:41:09 浏览数 (1)

先说声抱歉,最近身体有恙。停更了好几天。见谅见谅!现在我们继续:

当我们做到这一步时,已经基本可以和界面元素说Bye了。余下的内容,99%都是和数据打交道。

当我们创建 MyDataEnvironment、MyRelation、MyCursor类时,为了方便,我们把这些自定义类存储在MySPT.VCX 中。从前面我们已经可以感觉的到,数据环境、关系和游标有着密不可分的关系。有看客可能会说:“CA可以用 NewObject( ) 单独创建的啊,并不需要数据环境啊”。是滴,你这个使用方法是没有问题滴,巴特,这并不妨碍你继续看下去。

当我们在经典的方式下使用数据环境、关系以及游标时,VFP 为我们完成了“全部”工作。尤其是使用关系 时。在 VFP 的经典方式下,它用于在当前数据工作期中构建父子表之间的临时关系。而我们在使用自己的自定义关系类时,VFP 就显得不那么平易近人了。你需要自行构建这种临时关系。

熟悉 DBC 或其他数据库的看客都知道,在数据库中存在触发器和限制规则。抛却所有理论上的形而上,单就经验而言,如果在数据更新到数据库前所有被发送的数据都符合数据库的“规则”,那是再好不过的了。因此,我们需要在这一部分构建出一个完整的“内存数据库”。而要实现这一功能,就需要我们对自定义关系类 增加一些自定义的方法。

首先,我们先解决“字段有效性规则”。

对于使用 Creat Cursor 命令创建的游标,可以在命令中使用 Check 和 Error 参数指定字段的有效性规则。而我们所要创建的这套控制机制,绝大多数情况下所获得的游标的字段有效性规则是已经定义好的,或者说,是“需要”你在设计时刻实现的。我找到一个最好的实现方式:使用控件的Valid 事件。

我们可以在被绑定数据源的控件的 Valid 事件中写入下列代码:

代码语言:javascript复制
If This.lFieldRule = .T. And Evaluate(This.FieldRuleExpression) = .F.
 MessageBox(This.FieldRuleText, 16)
 Return 0
Endif

其中,lFieldRule 和 FieldRuleExpression为控件所属类的自定义属性。lFieldRule 确定是否进行“字段有效性规则”的检测,FieldRuleExpression 存储了“字段有效性规则”。如果,你打算对用户有一个明确的提示,那么,你还可以增加一个FieldRuleText 属性,使用任何一种你愿意使用的错误提示方法,最简单的就像上面代码中一样使用一个Messagebox 。

明天,我们来处理“触发器”的问题。

你的反馈是我写作的动力,欢迎评论,未完待续。

0 人点赞