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

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

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

很抱歉,因个人原因停更了几天。再次说声抱歉。

现在,该是 MyCursor 出场的时间了。它可能是这套控制机制中最复杂的一个自定义类。我们将分两部分进行描述:一部分为控制更新的内容;一部分为游标设置的内容。为了保证内容的连续性,今天先来说说第一部分。

当我们更新游标的时候,除非在特殊的状况下直接操作游标,大部分情况下,我们可以使用 TableUpdate()函数进行远程数据更新。

首先,我们先在 MyCursor 类中增加几个自定义方法:BeforeAdd、Add、AfterAdd、SetControlRO。其中,SetControlRO 是一个钩子方法,用于设置表单控件的只读状态。

在 Add 中,我们仅仅需要类似如下的代码:

代码语言:javascript
复制
If This.lEnabledUpdate = .T.
 This.BeforeAdd()
 Select (This.Alias)
 m.LcOldError = On([Error])
 On Error
 If This.BufferModeOverride = 3
 m.Temp = Tableupdate(.F., This.lForce) && 开放式行缓冲
 Else
 m.Temp = Tableupdate(.T., This.lForce) && 开放式表缓冲
 Endif
 If m.Temp = .F. && ODBC 错误
 * 这里是处理更新错误的代码
 On Error &LcOldError
 Return m.llResult
 Else
 This.SetControlRO()
 This.AfterSave()
 On Error &LcOldError
 Return .T.
 Endif
Endif

自定义属性 lEnabledUpdate 决定了所控制的游标是否为可更新游标;lForce 自定义属性决定了是否强制覆盖其他用户提交的更新。

然后,我们打开 MyDataEnvironment 类,定位到它的 Add 方法,它基本上应该是如下的样子:

代码语言:javascript
复制
Private All Like l*
Local loCursor As MyCursor Of MySPT.VCX, ;
  loRelation As MyRelation Of MySPT.VCX, ;
  llReturn As Logical
Begin Transaction && 开始 VFP 事务
= SQLSetprop(Thisform.nStatementHandle,[Transactions], 2) && 开始远程事务
For Each m.loRelation In This.Objects
 If Upper(m.loRelation.BaseClass) == [RELATION]
 m.llReturn = m.loRelation.Add()
 If m.llReturn = .F.
Exit
 Endif
 Endif
Endfor
If m.llReturn = .T.
 For Each m.loCursor In This.Objects
 If Upper(m.loCursor.BaseClass) == [CURSOR]
 m.llReturn = m.loCursor.Add()
 If m.llReturn = .F.
 Exit
 Endif
 Endif
 Endfor
 If m.llReturn = .T.
 = SQLSetprop(Thisform.nStatementHandle, [Transactions], 1) && 结束远程事务
 End Transaction && 结束 VFP 事务
 Endif
EndIf 
Thisform.Refresh
Return m.llReturn

至此,我们已经完成了这套控制系统的一个功能:增加记录。

编辑和删除记录,可以参照以上步骤自行完善。此外,针对记录指针的移动以及记录搜索,也可以参照以上步骤纳入到这套控制系统之中。

如果,你在实际应用过程中遇到了非常规的需求,那么,你可以派生出它的一个子类,来完成你的特殊需求。

下一次,我们来看看 MyCursor 的第二部分:游标设置。

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

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

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

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

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

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