操作方法

问题:无法使用 ArcPy 或 ArcObjects 编辑版本化视图

Last Published: October 1, 2025

描述

当使用 ArcPy 函数“更新游标”编辑版本化视图时,将返回以下异常:

Error:
SystemError: error return without exception set. 

以下是使用 updateRow() 函数编辑版本化视图的 Python 代码示例。

import arcpy
dbConnection = r'C:\Users\name\AppData\Roaming\ESRI\Desktop10.4\ArcCatalog\sdeconnection.sde'    
tablePath = dbConnection + "\\testdatabase.dataowner.test_evw"
with arcpy.da.UpdateCursor(tablePath, "*") as cur:
    for row in cur:
        row[1] = 3
        cur.updateRow(row)

原因

该行为是预期行为。 版本化视图适用于不支持地理数据库版本控制的应用程序。版本化视图不应通过不支持地理数据库版本控制的 ArcObjects 中的 ArcPy 来使用或修改。

解决方案或解决方法

使用 ArcPy 直接修改要素类。 Python 编辑器函数可以与指向事务版本的 ArcPy 工作空间结合使用,如下例所示:

import arcpy

#Start of parameters to change
path = r'C:\temp'
connection = "testversion.sde"
fc = "dataowner.test"
instance = "machinename"
username, password = "owner1", "owner1"
database = "testdatabase"
version = "dataowner.testversion"
#End of parameters to change
#There are more parameters in arcpy.CreateDatabaseConnection_management that we may wish to modify.

tablePath = path + "\\" + connection + "\\" + fc
arcpy.CreateDatabaseConnection_management(path, connection, "SQL_SERVER", instance, "DATABASE_AUTH", username, password, "SAVE_USERNAME", database, "", "TRANSACTIONAL", version)   
editor = arcpy.da.Editor(path + "\\" + connection )        
editor.startEditing() 
editor.startOperation()
with arcpy.da.UpdateCursor(tablePath, "*") as cur:
    for row in cur:
        row[1] = 3
        cur.updateRow(row)    
editor.stopOperation() 
editor.stopEditing(True)

如果必须使用 Python 编辑版本化视图,请注意 Python 能够执行 SQL 语句。 例如,ArcSDESQLExecute 是编辑版本化视图的另一种选择。 有关 ArcSDESQLExecute 的详细信息,请参阅以下 Web 帮助文档:ArcMap:ArcSDESQLExecute。此外,还有其他模块可用于连接和修改数据库中的表(例如,用于 Oracle 的 cx_Oracle)。

文章 ID: 000012986

接收通知并查找新问题或常见问题的解决方案

从我们全新的 AI 聊天机器人中获得简明答案和视频解决方案。

下载 Esri 支持应用程序

相关信息

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项