前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我们总是梦想着对象化(十三)

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

作者头像
加菲猫的VFP
发布2021-08-16 11:44:45
1510
发布2021-08-16 11:44:45
举报
文章被收录于专栏:加菲猫的VFP

本篇是本系列的最后一篇。

对 VFP 熟悉的都知道,按照 VFP经典的设计方式,游标载入时表单还未加载。此外,也经常有在运行时 Use 的情况。对于前者,可以在设计时刻为控件指定数据源;而对于后者,很有可能需要在Cursor 载入后用代码的方式对相关控件进行数据源的设置。因此,我们需要在 MyCursor 中增加一个属性开关来适应这种状况,还需要一个自定义的钩子方法来完成对控件的数据源设置。因此,我们的自定义方法CursorInit 应该有类似下面的代码:

代码语言:javascript
复制
If This.lCursorInit = .T.
 This.BeforeCursorInit()
 = SQLExec(Thisform.nStatementHandle, This.CMD, (This.Alias))
 This.SetCursor()
 This.AfterCursorInit()
 This.CursorSource=This.Alias
 Select (This.Alias)
 With This As Cursor
 .SetIndex()
 .SetControlRO()
 .SetControlSource()
 Endwith
Endif

lCursorInit 属性控制了 Cursor是否可以正常的“载入”,而 SetControlSource 自定义钩子方法则负责在必要的时候为控件设置数据源。

当我们在使用 SPT 时,首先要使用 SQLExec()来获取 Cursor ,我们可以将所需要执行的 Select 语句存储于MyCursor 的自定义属性 CMD,而所需的句柄则存储于 nStatementHandle 自定义属性。为了“以防不测”,我们可以增加 BeforeCursorInit和 AfterCursorInit 自定义钩子方法。

当我们成功的获取 Cursor 后,我们需要对 Cursor 进行必要的设置,这时,我们需要一个自定义方法:SetCursor,它的代码大致应该是以下的代码:

MakeTransactable(This.Alias) && 运行 Cursor 支持事务处理

代码语言:javascript
复制
If This.lBuffering = .T.
  CursorSetProp([Buffering], This.BufferModeOverride, (This.Alias)) && 设置缓冲
EndIf 
If This.lSendupdates=.T.
CursorSetProp([Tables], This.cRemoteTableName, This.Alias)
CursorSetProp([UpdateNameList],  This.cFieldRelation, This.Alias)
CursorSetProp([KeyFieldList], This.cMainKey,  This.Alias)
CursorSetProp([UpdatableFieldList], This.cEnabledField, This.Alias)
CursorSetProp([SendUpdates], This.lSendUpdates, This.Alias)
CursorSetProp([WhereType], This.nWhereType, This.Alias)
CursorSetProp([UpdateType],  This.nUpdateType, This.Alias)
Endif

这样,我们就可以使用标准的 SPT 方式来完成 MyCursor 。

参照前述的方法,我们可以在 MyDataEnvironment 中增加一个CursorInit 方法来控制 Cursor 的载入时机。

至此,我们就完成了一套控制 Cursor 的对象化的模型。如果你需要操作本地DBF 或者远程视图,可以参照以上内容自行完善。

当你完全领悟这套控制机制后,CA对你来说无异于水到渠成。

至此结束。谢谢欣赏。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档