相关文章推荐
含蓄的汽水  ·  在 Java ...·  1 年前    · 
好帅的签字笔  ·  基于Selenium的测试程序优化-阿里云开 ...·  1 年前    · 
会开车的火龙果  ·  上市公司创新指标&并购重组数据合集(2010 ...·  1 年前    · 
帅气的刺猬  ·  控制ScrollView的自动滚动速度_sc ...·  2 年前    · 
打盹的木耳  ·  Python 代码内存诊断 - 知乎·  2 年前    · 
Code  ›  在VFP9中利用CA对远程数据的存取进行管理(二)开发者社区
临时表
https://cloud.tencent.com/developer/article/1885776
慷慨的葡萄酒
1 年前
作者头像
加菲猫的VFP
0 篇文章

在VFP9中利用CA对远程数据的存取进行管理(二)

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 加菲猫的VFP > 在VFP9中利用CA对远程数据的存取进行管理(二)

在VFP9中利用CA对远程数据的存取进行管理(二)

作者头像
加菲猫的VFP
发布 于 2021-10-08 16:51:50
483 0
发布 于 2021-10-08 16:51:50
举报
CursorAdpater对于各种数据源,对TABLES和UPDATENAMELIST属性具有如下一般性规则,在进行程序设计时应当注意:

1、 TABLES:为确保自动更新后台数据能正确完成,必须按严格的格式为TABLES中的表名提供一个表名列表,这个顺序与表在SQL的INSERT,UPDATE和DELETE中出现的顺序应一致。

2、 UPDATENAMELIST:必须提供一个本地和远程的字段名列表对,它们有逗号分隔,每一对名字中包含一个本地字段名,紧跟一个远程字段名,远程字段名前TABLES中的表名。

3、 如果ALLOWINSERT,ALLOWUPDATE,ALLDELETE的属性为真(.T.),还必须设置正确主键值列表(KEY LIST)

批量更新

在表缓存的模式下,如果CA的BATCHUPDATECOUNT值大于1,CA对象使用批量更新模式对远程数据进行数据更新,在这种模式下,根据不同的数据源,必须符合如下条件:

1、 ODBC数据源:所有的INSERT,UPDATE,DELETE使用相同的ODBC句柄。

2、 ADO数据源:所有更新操作使用相同的ADODB的COMMAND对象来执行远程数据的更新。

3、 XML数据源:对所有允许的更新操作,CA对象都要使用XML作为数据源为类型。

注意:如果使用批量更新模式,以下事件不会被触发。即使在批量更新中有一个更新失败,VFP尝试为每一行发送一条单独的更新命令,然而,这些事件仍然不会被触发。它们是:

BeforInsert

AfterInsert

BeroreUpdate

AfterUpdate

BeforeDelete

AfterDelete

总的来讲,使用CA对数据进行存取时,可以按如下的原则来进行设置:

更新命令:

1、 让CA自动生成更新语句的命令

2、 直接对相关的更新命令写入自己的更新语句

更新方法:

1、 由VFP自动执行更新

2、 在程序中使用TABLEUPDATE()来执行更新

不管使用哪种方法,你都必须为更新设置冲突检测。

CA类中提供了很多的事件,这些事件可以方便的对数据进行灵活的操作,对CA事件的深入了解将有助于完全自由的控制CA的使用。当然,对初学者而言,你可以不用关心大部分的CA事件也可以完成程序的开发工作。本文将对CA的事件进行分类说明。

CA中的事件基本上可以分为如下几类,每一类都对应几个事件,这些事件又与相关的方法有紧密的联系:

一、与CA对象关联的临时表(CURSOR)相关的事件:

BeforeCursorfill AfterCursorfill; BeforeCorsorAttach AfterCursorAttach; BeforeCursorDetach AfterCursorDetach ; BeforeCursorClose AfterCursorClose

1、BeforeCursorfill:CA对象尝试附加在一个新的 临时表时发生。该事件有三个参数:lUseCursorSchema, lNoDataOnLoad, cSelectCmd。参数说明:lUseCursorSchema和lNoDataOnLoad是CursorFil()方法中的相关参数的值:cSelectCmd对应是CA对象中的SelectCmd属性的值。

值得关注的是,我们可以在这个事件中改变参数cSelectCmd的值来对CursorFill生成的临时表的结果集进行灵活控制,改变这个参数的值不会 修改CA对象中SelectCmd的属性值。在使用CursorFill的时候将保存这个修改的参数的值,CursorRefresh方法在调用时将使用 这个参数的值进行临时表的刷新,而不是使用SelectCmd属性的值。比如,我们可以为SelectCmd属性设置一个基本的SQL语句,在这个事件中 为cSelectCmd参数增加一个Where语句而不需要SelectCmd属性的本身的值。SelectCmd参数的值以后将被传送给 AfterCursorfill事件。

如果这个事件返回.F.,CursorFill将不会执行,附加的临时表也不会关闭。

2、 AfterCursorfill:在CA尝试创建一个新的临时表后发生。该事件有四个参数:lUseCursorSchema, lnoDataOnLoad, cSelectCmd, lResult。lUseCursorSchema, lnoDataOnLoad是CursorFill方法中的值,cSelectCmd是BeforeCursorfill事件中的值,lResult是 CursorFill的返回值。例如:可以在这个事件中为临时表的结果进行排序:

PROCEDURE AfterCursorFillL
PARAMETERS lUseCursorSchema, noDataOnLoad, cSelectCmd, lResult
 
推荐文章
含蓄的汽水  ·  在 Java 中,如何创建泛型对象与泛型数组_创建泛型数组_暗诺星刻的博客-CSDN博客
1 年前
好帅的签字笔  ·  基于Selenium的测试程序优化-阿里云开发者社区
1 年前
会开车的火龙果  ·  上市公司创新指标&并购重组数据合集(2010-2022.3) - 知乎
1 年前
帅气的刺猬  ·  控制ScrollView的自动滚动速度_scrollto滚动速度_the01hierarch的博客-CSDN博客
2 年前
打盹的木耳  ·  Python 代码内存诊断 - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号