11 votos

Quitar bloqueo en la clase de entidad

Cuando intento eliminar una clase de entidad , después o durante el uso de Arcgis engine aplicación que utiliza la misma clase de entidad tengo un error relativo a la cerradura , por lo que no puedo conseguir este viaje de bloqueo hasta que se me reinicie el equipo.

me gustaría conocer una manera de eliminar bloqueos utilizando arcpy o de arcobjects 10.1 , sería perfecto si puedo conseguir paseo de la cerradura en el interior de la arcengine app que también bloquea la geodatabase , he visto diferentes puestos en el SE acerca de los bloqueos, pero ninguno de ellos da la solución a la libre cierres con Arcobjects.

Cualquier ayuda por favor

12voto

gappy3000 Puntos 211

Si usted está usando Arcpy de secuencias de comandos, los datos de bloqueo de problemas se han vuelto aún más problemática con la 10.1.

Si los cierres están siendo creados por el código, entonces no limpiar después de ti mismo. Liberación de todas las referencias a las clases de entidad, las áreas de trabajo, cursores, etc. Los bloqueos se quitan cuando no se tienen más referencias a los objetos están bloqueados.

Bien, esa es la forma en que debería funcionar, pero rara vez lo hace. Normalmente un código de trabajo de vez en cuando, pero a menudo accidente inexplicablemente en diferentes lugares.

El problema parece ser que los bloqueos se acaba de dejar sentado allí `por un tiempo', pero el código se ejecuta mucho más rápido que la velocidad a la que los bloqueos son eliminados. Sin embargo, algunos de los incorporada Arco de herramientas parecen forzar cerraduras para ser liquidados en la demanda (como los bloqueos se aplican a toda la GDBs todos a la vez, un bloqueo que le impide trabajar con cualquiera de las Clases de entidad). Estas herramientas son de arcpy.Compact_management() y arcpy.Existe().

Aquí es un poco la función que utilizo dentro de mi código que ha aumentado la fiabilidad (para una secuencia de comandos que crea y edita varios GDBs Clases de entidad y dentro de ellos):

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...' % inputWS
  else:
    return '!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!' % inputWS

Se utiliza simplemente pasando el área de trabajo (GDB) ruta de acceso a la función, y debe realizarse después de cada operación en el área de trabajo (es decir, GDB creación) o Clases de entidad dentro del espacio de trabajo (es decir, los Cursores, la adición de campos, cálculos, etc.). Por ejemplo (que se muestra aquí como una secuencia de comandos independiente, con la función en la parte superior; para utilizar la función de copiar y pegar entre las importaciones y el programa actual, como se muestra aquí):

import arcpy

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...' % inputWS
  else:
    return '!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!' % inputWS

GDBpath = '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....

8voto

Haaakon Puntos 115

(No tengo suficiente rep comentar así que estoy respondiendo a su lugar.)
@Michalis Avraam
Esto no es enirely cierto, un FGDB tiene 3 tipos de cerraduras.

  1. SR - bloqueo de esquema
  2. RD - bloqueo de lectura
  3. ED - bloqueo de edición

La solución propuesta por StacyR va a funcionar en todas las situaciones excepto para la exclusiva edición de cerraduras (ED) de acuerdo a la documentación de ayuda de arcgis.

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//003n0000007t000000

7voto

auramo Puntos 161

Si los cierres están siendo creados por el código, entonces no limpiar después de ti mismo. Liberación de todas las referencias a las clases de entidad, las áreas de trabajo, cursores, etc. Los bloqueos se quitan cuando no se tienen más referencias a los objetos están bloqueados.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X