Dưới đây là cách tiếp cận ArcObjects, dựa trên ví dụ này , để liệt kê tất cả các phép nối trên một lớp và liệt kê tên bảng đích và bảng nguồn của chúng và các khóa chính và khóa ngoài:
- Nhận một tham chiếu đến một
ILayer
có một hoặc nhiều tham gia
- Cast
ILayer
đểIDisplayTable
- Đúc
IDisplayTable.DisplayTable
tài sản đểIRelQueryTable
- Trong khi bảng hiện tại là
IRelQueryTable
:
- Kiểm tra việc
RelQueryTable
's DestinationTable
và SourceTable
thuộc tính
- Kiểm tra
OriginPrimaryKey
và OriginForeignKey
các tài sản của IRelQueryTable.RelationshipClass
tài sản.
- Đặt bảng hiện nay với dòng
RelQueryTable
's SourceTable
tài sản
Tập lệnh Python này (sử dụng comtypes và mô đun trình trợ giúp này ) sẽ đi qua tất cả các phép nối, từ mới nhất đến sớm nhất và in tên bảng đích và nguồn, khóa chính gốc và khóa ngoại gốc cho mỗi phép nối:
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)
Ví dụ đầu ra, được cung cấp một lớp nguồn với ba phép nối:
tham gia_table_3 master_fc_join_table_1_join_table_2 THAM GIA_ID_3 master_fc.MASTER_ID
tham gia_table_2 master_fc_join_table_1 THAM GIA_ID_2 master_fc.MASTER_ID
tham gia_table_1 master_fc THAM GIA_ID_1 MASTER_ID
Để biết thêm thông tin, hãy xem Làm cách nào để tôi truy cập ArcObjects từ Python?