Tengo una geodatabase de archivos Esri con dominios de atributo definidos. Necesito eliminar algunos de los dominios de atributo, pero no puedo porque "el dominio es utilizado por una regla de atributo". . ¿Cómo podría descubrir qué clase de entidad está utilizando los dominios?
Executing: DeleteDomain R:\v5\YT_Canvec.gdb Permanency
Start Time: Thu May 19 11:01:02 2011
ERROR 999999: Error executing function.
The domain is used by an attribute rule.
Failed to execute (DeleteDomain).
Failed at Thu May 19 11:01:02 2011 (Elapsed Time: 0.00 seconds)
Hay más de un centenar de clases de entidad en la geodatabase, mirando interactivamente las propiedades del campo FC para cada una no es un iniciador. El gdb es demasiado grande para convertirlo en un gdb personal y entrar por la puerta trasera con ms-access (un método poco fiable de todos modos).
(26 de mayo de 2011): Otra forma de expresar esto es "¿Qué clase de entidad está usando el dominio X?"
arcpy
file-geodatabase
error-999999
domains
wilkie mate
fuente
fuente
Respuestas:
Para responder a la pregunta de manejar clases de entidad con subtipos, es posible con arcpy (10.1+).
El código de subtipo, stcode, será cero si no hay subtipos, por lo que el código imprime 'Ninguno'.
El diccionario de subtipos tiene más, así que inspecciónalo en código.
fuente
Python tiene métodos para enumerar clases de entidad en una geodatabase, recorriendo cada clase de entidad en la lista, enumerando campos en cada clase de entidad y mostrando el dominio de cada campo.
El código anterior debería funcionar en ArcGIS 10 e imprimirá una lista directamente en la ventana del intérprete de Python. Luego puede copiar y pegar la lista en un editor de texto o Excel para revisar los resultados más fácilmente.
fuente
Como no creo que Python maneje subtipos, estoy publicando este código C # que debería. Lo probé con el agua de muestra / agua residual de Esri geodb y encontré los siguientes dominios no utilizados:
A menudo, los DBA se molestan porque no se puede acceder a los dominios, que son esencialmente tablas de búsqueda, a través de SQL.
Este código probado desde arcmap ( actualizado por el comentario de Matt):
fuente
Este código debe devolver lo que se solicita. Recorrerá sucintamente todas las clases y tablas de entidades en un espacio de trabajo GDB / FS y devolverá todos los campos asociados con un dominio, el nombre del campo y la clase / tabla de entidades a la que pertenece.
fuente
Lamentablemente, la respuesta de Brian, que es una respuesta directa y útil a la pregunta formulada, no resuelve mi problema real. Supongo que debido a un error en el gdb en cuestión (aunque ninguna de las clases de entidad tiene dominios adjuntos, todavía hay uno que no puedo eliminar). En cualquier caso, encontré otro método para determinar qué fc tienen dominios asociados. Es interactivo, pero mucho más rápido que pasar por cada propiedad de campo en cada fc:
fuente
HD_148009_2
está vinculado al CV DomainPermanency
, el script arcpy de Brian no informa de ningún dominio vinculado, y tampoco lo hace el inspector de campos de Propiedades de clase de entidad en ArcCatalog. Sin embargo, ahora finalmente lo he reducido lo suficiente como para registrar un informe de error con el soporte técnico de Esri.Esto es lo que imagino que Matt Wilkie tuvo que buscar y escribir para aumentar el código de Brian. Tenía que obtener todos los dominios para tablas, clases de entidades en el directorio raíz de una base de datos y funciones en todos los conjuntos de datos de funciones. Exporté la información como un csv para permitir que otros trabajadores limpien nuestros entornos de geodatabase de dominios antiguos.
fuente
Esri: Preguntas frecuentes: ¿Cómo puedo encontrar todos los lugares donde se hace referencia a dominios en mi geodatabase? . "Funciones de Python que pueden enumerar las propiedades de estas estructuras en una geodatabase. Entre las propiedades se encuentran los dominios a los que se hace referencia. Se proporciona un script de muestra y una geodatabase de archivos que demuestran cómo las funciones de Python podrían usarse para enumerar los dominios y otras propiedades de clases de entidad y tablas. Los dominios se pueden asociar con campos en una tabla o clase de entidad; también se pueden establecer para campos categorizados por un subtipo ".
Los resultados son ruidosos para esta pregunta, van más allá de los dominios que están en uso, pero es una plataforma más amplia para comenzar.
Extracto del código, editado por brevedad:
fuente