相关文章推荐
酷酷的日光灯  ·  临时表 | TiDB 文档中心·  1 周前    · 
爱听歌的机器人  ·  如何设置相对或绝对定位并使文字左对齐?·  1 年前    · 
淡定的板凳  ·  NetworkX编程实践基础:24网络可视化 ...·  2 年前    · 
欢快的拐杖  ·  MySQL的JSON_TABLE同时展开两个 ...·  2 年前    · 
帅气的领带  ·  abbitTemplate中convertS ...·  2 年前    · 
失恋的马铃薯  ·  画ER模型图直接导入数据库脚本生成 - 知乎·  2 年前    · 
Code  ›  在VFP9中利用CA对远程数据的存取进行管理(二)开发者社区
临时表
https://cloud.tencent.com/developer/article/1885776
慷慨的葡萄酒
2 年前
作者头像
加菲猫的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
 
推荐文章
酷酷的日光灯  ·  临时表 | TiDB 文档中心
1 周前
爱听歌的机器人  ·  如何设置相对或绝对定位并使文字左对齐?
1 年前
淡定的板凳  ·  NetworkX编程实践基础:24网络可视化高阶_哔哩哔哩_bilibili
2 年前
欢快的拐杖  ·  MySQL的JSON_TABLE同时展开两个json数组字段时NULL值的处理_mysql nested path '$_Daletxt的博客-CSDN博客
2 年前
帅气的领带  ·  abbitTemplate中convertSendAndReceive方法与convertAndSend方法的区别 - 简书
2 年前
失恋的马铃薯  ·  画ER模型图直接导入数据库脚本生成 - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号