다음은이 예제를 기반으로하는 ArcObjects 방식 으로 레이어의 모든 조인을 열거하고 대상 및 소스 테이블 이름과 기본 및 외래 키를 나열합니다.
ILayer
하나 이상의 조인이 있는에 대한 참조 가져 오기
- 캐스트
ILayer
로IDisplayTable
IDisplayTable.DisplayTable
속성을 캐스트IRelQueryTable
- 현재 테이블이
IRelQueryTable
:
RelQueryTable
의 DestinationTable
및 SourceTable
속성 검사
- 속성의
OriginPrimaryKey
및 OriginForeignKey
속성을 검사하십시오 IRelQueryTable.RelationshipClass
.
- 현재 현재 테이블을 설정
RelQueryTable
의 ' SourceTable
재산
이 Python 스크립트 ( comtypes 및이 도우미 모듈 사용 )는 최신에서 가장 빠른 모든 조인을 거치며 각 조인의 대상 및 소스 테이블 이름, 원본 기본 키 및 원본 외래 키를 인쇄합니다.
from ESRICOMHelpers import * # helper module from https://gis.stackexchange.com/a/5082/753
esriArcMapUI = GetESRIModule("esriArcMapUI")
esriCarto = GetESRIModule("esriCarto")
esriGeoDatabase = GetESRIModule("esriGeoDatabase")
def listJoins(table):
while CType(table, esriGeoDatabase.IRelQueryTable):
relQueryTable = CType(table, esriGeoDatabase.IRelQueryTable)
destTable = relQueryTable.DestinationTable
sourceTable = relQueryTable.SourceTable
destDataset = CType(destTable, esriGeoDatabase.IDataset)
sourceDataset = CType(sourceTable, esriGeoDatabase.IDataset)
relClass = relQueryTable.RelationshipClass
print destDataset.Name, sourceDataset.Name, relClass.OriginPrimaryKey, relClass.OriginForeignKey
table = sourceTable
if __name__ == "__main__":
#app = GetCurrentApp() # Use if run in-process
app = GetApp("ArcMap") # Use if run in a standalone script
mxd = CType(app.Document, esriArcMapUI.IMxDocument)
# Gets the first layer in the active data frame
map = mxd.FocusMap
lyr = map.Layer[0]
# Need to get the "display table" to access the joins
displayTable = CType(lyr, esriCarto.IDisplayTable).DisplayTable
# List the layer's joined tables
listJoins(displayTable)
세 개의 조인이있는 소스 레이어가 제공된 예제 출력 :
join_table_3 master_fc_join_table_1_join_table_2 JOIN_ID_3 master_fc.MASTER_ID
join_table_2 master_fc_join_table_1 JOIN_ID_2 master_fc.MASTER_ID
join_table_1 master_fc JOIN_ID_1 MASTER_ID
자세한 내용 은 Python에서 ArcObject에 액세스하는 방법을 참조하십시오 .