1.对于非远程数据库,如MDB,GDB,由StartEditing开启编辑会话,在StopEditOperation时编辑数据先保存在工作空间,然后可以通过UndoOperation来进行撤销操作,在StopEditing时,可通过参数来控制是否保存在数据库中。
2.对于远程数据库SDE库,若用非远程数据库方式开启编辑会话,在StopEditOperation时所编辑的数据将直接保存在数据库中,此后的撤销重做都无效,以及StopEditing时设置编辑不保存将失效。
解决方案1:用IMultiuserWorkspaceEdit支持多用户编辑类设定esriMESMNonVersioned参数来进行非版本编辑,在StopEditing时,可通过参数来控制是否保存在数据库中。但是撤销、修复功能将不能实现。
解决方案2:用IMultiuserWorkspaceEdit设定esriMESMVersioned进行版本注册编辑,既可实现撤销、修复功能,又可在StopEditing时控制是否将所编辑数据保存到数据库中,如图1。
3.在SDE数据库中编辑,若要实现撤销恢复功能,则其编辑数据必须进行版本注册。且所有的图层编辑操作都要在一组StartEditOperation和StopEditOperation/AbortEditOperation中。
[PS:一个编辑会话可以有多个编辑操作]
图1 数据库的数据编辑总图