Eu tenho um geodatabase de arquivo Esri com domínios de atributo definidos. Preciso excluir alguns dos domínios de atributo, mas não posso porque "O domínio é usado por uma regra de atributo". . Como posso descobrir quais classes de recurso estão usando os domínios?
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)
Existem mais de cem classes de recursos no geodatabase, analisando interativamente as propriedades do campo FC, pois cada uma delas não é iniciante. O gdb é muito grande para converter em um gdb pessoal e entrar pela porta dos fundos com o ms-access (um método desonesto de qualquer maneira).
(26 de maio de 2011): Outra maneira de expressar isso é "qual classe de recurso está usando o domínio X?"
arcpy
file-geodatabase
error-999999
domains
Matt Wilson
fonte
fonte
Respostas:
Para responder à questão de lidar com classes de recursos com subtipos, é possível com o arcpy (10.1+).
O código do subtipo, stcode, será zero se não houver subtipos; portanto, o código imprime 'Nenhum'.
O dicionário de subtipos tem mais, então inspecione-o no código.
fonte
O Python possui métodos para listar classes de recursos em um geodatabase, percorrendo cada classe de recurso na lista, listando campos em cada classe de recurso e mostrando o domínio de cada campo.
O código acima deve funcionar no ArcGIS 10 e imprimirá uma lista diretamente na janela do interpretador python. Você pode copiar e colar a lista em um editor de texto ou Excel para revisar os resultados mais facilmente.
fonte
Como não acho que python lida com subtipos, estou postando esse código c # que deveria. Testei-o com o geodb de amostra de água / efluente da Esri e encontrei os seguintes domínios não utilizados:
Freqüentemente, os DBA ficam irritados porque os domínios - que são essencialmente tabelas de pesquisa - não podem ser acessados via SQL.
Este código foi testado no arcmap ( atualizado pelo comentário de Matt):
fonte
Este código deve retornar o que está sendo solicitado. Ele percorrerá sucintamente todas as classes e tabelas de recursos em um espaço de trabalho GDB / FS e retornará todos os campos associados a um domínio, o nome do campo e a classe / tabela de recursos a que ele pertence.
fonte
Infelizmente, a resposta de Brian, que é uma resposta direta e utilizável à pergunta, não resolve meu problema real. Presumo que, devido a um erro no gdb em questão (mesmo que nenhuma das classes de recursos tenha domínios anexados, ainda há um que não tenho permissão para excluir). De qualquer forma, encontrei outro método para determinar quais fc têm domínios associados. É interativo, mas muito mais rápido do que passar por cada propriedade de campo em cada fc:
fonte
HD_148009_2
está vinculado ao domínio CVPermanency
, o script arcpy de Brian não relata domínio vinculado e o inspetor de campos Feature Class Properties no ArcCatalog também não. No entanto, agora eu finalmente o reduzi o suficiente para registrar um relatório de erro com o suporte técnico da Esri.É isso que imagino que Matt Wilkie teve que procurar e escrever para aumentar o código de Brian. Eu tive que obter todos os domínios para tabelas, classes de recursos no diretório raiz de um banco de dados e recursos em todos os conjuntos de dados de recursos. Exportei as informações como um CSV para permitir que outros trabalhadores limpassem nossos ambientes de banco de dados geográficos de domínios antigos.
fonte
Esri: FAQ: Como posso encontrar todos os locais onde os domínios são referenciados no meu banco de dados geográficos? . "Funções Python que podem listar as propriedades dessas estruturas em um geodatabase. Entre as propriedades estão os domínios referenciados. São fornecidos um exemplo de script e geodatabase de arquivo que demonstram como as funções Python podem ser usadas para listar os domínios e outras propriedades das classes de recursos e Os domínios podem ser associados a campos em uma classe ou tabela de recursos; além disso, podem ser definidos para campos categorizados por um subtipo ".
Os resultados são barulhentos para esta questão, indo além dos domínios em uso, mas são uma plataforma mais ampla para começar.
Trecho de código, editado por questões de brevidade:
fonte