J'ai une géodatabase fichier Esri avec des domaines d'attribut définis. Je dois supprimer certains des domaines d'attribut, mais je ne peux pas car «le domaine est utilisé par une règle d'attribut». . Comment puis-je découvrir quelle (s) classe (s) d'entités utilisent les domaines?
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)
Il existe plus d'une centaine de classes d'entités dans la géodatabase, la recherche interactive des propriétés de champ FC pour chacune n'est pas un démarreur. La gdb est trop grande pour être convertie en gdb personnelle et passer par la porte arrière avec ms-access (une méthode douteuse de toute façon).
(2011-May-26): Une autre façon d'exprimer ceci est "quelle classe d'entités utilise le domaine X?"
arcpy
file-geodatabase
error-999999
domains
Matt Wilkie
la source
la source
Réponses:
Pour répondre à la question de la gestion des classes d'entités avec des sous-types, c'est possible avec arcpy (10.1+).
Le code de sous-type, stcode, sera nul s'il n'y a pas de sous-types, donc le code imprime «Aucun».
Le dictionnaire des sous-types en a plus, alors inspectez-le dans le code.
la source
Python propose des méthodes pour répertorier les classes d'entités dans une géodatabase, parcourir chaque classe d'entités de la liste, répertorier les champs de chaque classe d'entités et afficher le domaine de chaque champ.
Le code ci-dessus devrait fonctionner dans ArcGIS 10 et il imprimera une liste directement dans la fenêtre de l'interpréteur python. Vous pouvez ensuite copier et coller la liste dans un éditeur de texte ou Excel pour consulter les résultats plus facilement.
la source
Comme je ne pense pas que python gère les sous-types, je publie ce code c # qui devrait. Je l'ai testé avec un échantillon de géodonnées eau / eaux usées d'Esri et j'ai trouvé les domaines inutilisés suivants:
Souvent, les administrateurs de bases de données se fâchent que les domaines - qui sont essentiellement des tables de recherche - ne soient pas accessibles via SQL.
Ce code testé depuis arcmap ( mis à jour par le commentaire de Matt):
la source
Ce code devrait retourner ce qui est demandé. Il traversera succinctement toutes les classes d'entités et les tables d'un espace de travail GDB / FS et renverra tous les champs associés à un domaine, le nom du champ et la classe / table d'entités à laquelle il appartient.
la source
Malheureusement, la réponse de Brian, qui est une réponse directe et utilisable à la question posée, ne résout pas mon problème réel. Je présume en raison d'un bogue dans la gdb à portée de main (même si aucune des classes d'entités n'a de domaine attaché, il y en a toujours un que je ne suis pas autorisé à supprimer). Dans tous les cas, j'ai trouvé une autre méthode pour déterminer quels fc ont des domaines associés. C'est interactif, mais beaucoup plus rapide que de parcourir chaque propriété de champ sur chaque fc:
la source
HD_148009_2
est lié au domaine CVPermanency
, le script arcpy de Brian ne signale aucun domaine lié, et l'inspecteur des champs Propriétés de la classe d'entités dans ArcCatalog non plus. Cependant, maintenant je l'ai finalement suffisamment réduit pour enregistrer un rapport de bogue avec le support technique d'Esri.C'est ce que j'imagine que Matt Wilkie a dû rechercher et écrire pour augmenter le code de Brian. J'ai dû obtenir tous les domaines pour les tables, les classes d'entités dans le répertoire racine d'une base de données et les fonctionnalités dans tous les jeux de données d'entités. J'ai exporté les informations en tant que csv pour permettre à d'autres travailleurs de nettoyer nos environnements de géodatabase d'anciens domaines.
la source
Esri: FAQ: Comment puis-je trouver tous les endroits où les domaines sont référencés dans ma géodatabase? ."Fonctions Python pouvant répertorier les propriétés de ces structures dans une géodatabase. Parmi les propriétés figurent les domaines référencés. Un exemple de script et de géodatabase fichier est fourni qui montre comment les fonctions Python peuvent être utilisées pour répertorier les domaines et autres propriétés des classes d'entités et tables. Les domaines peuvent être associés à des champs dans une classe d'entités ou une table; ils peuvent en outre être définis pour des champs classés par sous-type. "
Les résultats sont bruyants pour cette question, allant au-delà des domaines utilisés, mais constituent une plate-forme plus large pour commencer.
Extrait de code, édité par souci de concision:
la source