- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IWorkspaceEdit接口
IWorkspaceEdit接口 - [ArcEnine接口]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明/logshtml
Workspace Editing的成员。
成员
AbortEditOperation,DisableUndoRedo,EnableUndoRedo,HasEdits,HasRedos,HasUndos,IsBeingEdited,RedoEditOperation,
StartEditing,StartEditOperation,StopEditOperation,StopEditing,UndoEditOperation
IWorkspaceEdit接口可以使用户开始和结束编辑,在这期间geodatabase中的对象可以更新。一个编辑期对应一个长事物。编辑期间应用程序可见的更改仅是该程序所做的更改。其他同步执行的应用程序所做的修改直到editsession丢弃或保存后才可见。
强烈建议使用edit session在edit operation中执行insert,update或delete操作。虽然不用明确指出开始和结束一个edit operation,但这样做结果是不确定的,取决于数据库操作时的状态,甚至所做的修改不能实现而出错。基于这个原因,所有编辑操作都应在edit operation中。
Geodatabase确保了edit session期间database中的row对象的唯一实例。地理数据库不支持嵌套事务,在SDE地理数据库中有版本的环境中编辑时一次只能打开一个事务。这就是说,在一个连接下编辑多个版本时,在另一个版本上调用StartEditing时要首先在第一个版本上调用StopEditing。在关闭第一个事务之前打开另一个事务,将返回应用程序一个oper transaction错误。在程序中调用先IsBeingEdited再调用StartEditing可以避免这个错误。使用ArcObjects geodatabase 数据存取对象(例如,删除要素集或创建一个新要素集)等DDL(数据定义语言)使用数据库事务去报数据字典白哦的完整性,并在操作结束时执行事务。应用程序在事务中不应使用DDL操作,应用程序的事务应限制在DML操作中(如数据更新)。
在地理数据库中正确编辑对象的规则如下:
1.?????? 所有的对象编辑工作要在一个edit session中完成。
2.?????? 将改变分成edit operations。
3.?????? 在edit session的两端丢弃对象的所有引用(如在StartEditing时)。如果在整个edit operation期间保留对row对象的引用,在undo,redo和abort edit操作以及在版本数据库的reconcile操作后丢弃所有引用。在ArcMap中,editor使用IEditorEvents和IEditorEvents2接口广播相应事件调用这些操作。个人和企业数据库workspace支持IWorkspaceEditEvents和IVersionEvents外向接口,可以直接广播这些事件。
4.?????? 使用non-recycling 搜索cursor获取要更新的对象(使用tables,feature classes和selection sets支持的Search,GetRow或GetRows方法)。只有在drawing和只读访问状态下才使用Recycling cursors。
5.?????? 获取要编辑对象的所有属性。Query filters在sub fields属性上使用“*”。
6.?????? 改变row对象后,标记对象为已改变,激发OnChanged消息,调用对象的IRow::Store方法向相关对象广播消息。调用IRow::Delete方法激发OnDelete消息,删除对象。在edit operation中的存储和删除操作会自动、周期的冲入数据库中确保read/query的一致性和更新的效率。使用这些方法的set版(例如,IRowEdit::DeletSet)更新或删除对象集,以提高执行效率。
7.?????? Update和insert cursors要载入大量数据,数据update API用于edit session外,在工程的数据载入阶段,在简单数据上直接更新和插入。在编辑应用程序中避免使用这些API。在edit session或复杂对象(没有简单行或实体行为或参与符合关系的对象)中使用这些API,将取消其拥有的任何执行优点。在rows,objects,features tables,object classes和featureclasses的文档中查看这些规则的详细信
文档评论(0)