Wenn ich versuche, eine Feature-Class zu löschen, habe ich nach oder während der Verwendung einer Arcgis Engine-App, die dieselbe Feature-Class verwendet, einen Fehler bezüglich der Sperre erhalten, sodass ich diese Sperre erst nach einem Neustart des Computers nutzen kann.
Ich würde gerne wissen, wie man Sperren mit arcpy oder arcobjects 10.1 entfernen kann. Es wäre perfekt, wenn ich die Sperre in der Arcengine-App nutzen könnte, die auch die Geodatabase sperrt. Ich habe in SE verschiedene Posts über Sperren gesehen, aber niemand von ihnen bietet die Lösung für freie Sperren mit ArcObjects.
Ich hatte vor einiger Zeit eine ähnliche Frage ( gis.stackexchange.com/q/28977/8104 ). Ich konnte keine Antwort zu den Sperren finden, obwohl es gute Informationen zum Löschen in Speicherobjekten gab.
Wenn Sie Arcpy-Skripte verwenden, sind Probleme mit der Datensperre mit 10.1 noch problematischer geworden.
Wenn die Sperren von Ihrem Code erstellt werden, bereinigen Sie nicht nach sich selbst. Geben Sie alle Verweise auf Feature-Classes, Arbeitsbereiche, Cursor usw. frei. Die Sperren werden entfernt, wenn Sie keine Verweise mehr auf die gesperrten Objekte haben.
Nun, so sollte es funktionieren, aber das tut es selten. Normalerweise funktioniert ein Code gelegentlich, stürzt jedoch häufig unerklärlich an verschiedenen Stellen ab.
Das Problem scheint zu sein, dass Sperren nur "für eine Weile" dort sitzen bleiben, aber der Code läuft viel schneller als die Geschwindigkeit, mit der die Sperren entfernt werden. Einige der integrierten Arc-Tools scheinen jedoch das Löschen von Sperren bei Bedarf zu erzwingen (da Sperren für alle GDBs gleichzeitig gelten, verhindert eine Sperre, dass Sie mit einer der enthaltenen Feature-Classes arbeiten können). Diese Tools sind arcpy.Compact_management () und arcpy.Exists ().
Hier ist eine kleine Funktion, die ich in meinem Code verwende und die Zuverlässigkeit erheblich erhöht hat (für ein Skript, das mehrere GDBs und Feature-Classes in ihnen erstellt und bearbeitet):
def clearWSLocks(inputWS):'''Attempts to clear locks on a workspace, returns stupid message.'''if all([arcpy.Exists(inputWS), arcpy.Compact_management(inputWS), arcpy.Exists(inputWS)]):return'Workspace (%s) clear to continue...'% inputWSelse:return'!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!'% inputWS
Es wird verwendet, indem einfach der Pfad des Arbeitsbereichs (GDB) an die Funktion übergeben wird, und sollte nach jeder Operation entweder im Arbeitsbereich (dh GDB-Erstellung) oder in Feature-Classes im Arbeitsbereich (dh Cursor, Hinzufügen von Feldern, Berechnungen usw.) ausgeführt werden. . Zum Beispiel (hier als eigenständiges Skript mit der Funktion oben angezeigt; um die Funktion zu verwenden, kopieren Sie sie und fügen Sie sie zwischen den Importen und dem eigentlichen Programm ein, wie hier gezeigt):
import arcpydef clearWSLocks(inputWS):'''Attempts to clear locks on a workspace, returns stupid message.'''if all([arcpy.Exists(inputWS), arcpy.Compact_management(inputWS), arcpy.Exists(inputWS)]):return'Workspace (%s) clear to continue...'% inputWSelse:return'!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!'% inputWSGDBpath='C:/Temp/'GDBname='Test.gdb'
tableName ='SweetFC'
arcpy.CreateFileGDB_management(GDBpath,GDBname)print(clearWSLocks(GDBpath+GDBname))
arcpy.CreateTable_management(GDBpath+GDBname, tableName)print(clearWSLocks(GDBpath+GDBname))# etc....
Compact funktioniert nicht, wenn ein Schloss vorhanden ist. Dies erhöht zwar die Leistung, wenn Sie viele Operationen einer FGDB ausführen, jedoch auf Kosten der eigenen Laufzeit.
Eine Datei-Geodatabase verfügt über drei Arten von Sperren.
SR - Schemasperre
RD - Lesesperre
ED - Bearbeitungssperre
Die von @StacyR vorgeschlagene Lösung funktioniert in allen Situationen mit Ausnahme der exklusiven Bearbeitungssperren (ED) gemäß der Arcgis-Hilfedokumentation.
Wenn die Sperren von Ihrem Code erstellt werden, bereinigen Sie nicht nach sich selbst. Geben Sie alle Verweise auf Feature-Classes, Arbeitsbereiche, Cursor usw. frei. Die Sperren werden entfernt, wenn Sie keine Verweise mehr auf die gesperrten Objekte haben.
Ich weiß, dass dieser Thread ziemlich alt ist, aber ich habe ein Problem damit, eine REA in arcpy löschen zu können. Was genau meinen Sie mit "Alle Verweise auf Feature-Classes, Arbeitsbereiche, Cursor usw. freigeben". Wie würde ich vorgehen, um die genannten Referenzen freizugeben?
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.