#1 Fri 12 August 2011 12:01
- tnicolas
- Participant actif
- Date d'inscription: 18 Apr 2007
- Messages: 64
[ArcGis 9.1] jointure VBA
Bonjour,
J'ai un souci avec un code pour créer des jointures, en fait je n'arrive pas à en créer plusieurs sur une même table.
J'ai une table lieu non carto contenant un champs id_commune,
une table commune carto avec les champs id_commune et id_dep,
une table dep carto avec les champs id_dep et id_reg.
J'arrive à joindre lieu et commune, mais dés que je veux joindre lieu_commune avec dep, ça supprime toutes les jointures ... . Quelqu'un à une idée ou une piste ?
Le code
Code:
Sub refairejointure()
'créer une jointure
Dim mondoc As IMxDocument
Dim macarte As IMap
Dim pFeatLayer As IFeatureLayer
Dim pDispTable As IDisplayTable
Dim pDispTable2 As IDisplayTable
Dim pFCLayer As IFeatureClass
Dim matable_commune As ITable
Dim matable_dep As ITable
Dim i As Integer
Dim mestables As IStandaloneTableCollection
Dim latable As IStandaloneTable
Dim matable As ITable
Dim champ1 As String
Dim champ2 As String
Dim pMemRelFact As IMemoryRelationshipClassFactory
Dim pRelClass As IRelationshipClass
Dim pDispRC As IDisplayRelationshipClass
Dim pSelItem As IUnknown
Set mondoc = ThisDocument
Set macarte = mondoc.FocusMap
For i = 0 To macarte.LayerCount - 1
If macarte.Layer(i).Name = "commune" Then
Set pFeatLayer = macarte.Layer(i)
Set pDispTable = pFeatLayer
Set pFCLayer = pDispTable.DisplayTable
Set matable_commune = pFCLayer
End If
If macarte.Layer(i).Name = "dep" Then
Set pFeatLayer = macarte.Layer(i)
Set pDispTable = pFeatLayer
Set pFCLayer = pDispTable.DisplayTable
Set matable_dep = pFCLayer
End If
Next i
Set mestables = macarte
For i = 0 To mestables.StandaloneTableCount - 1
Set latable = mestables.StandaloneTable(i)
If latable.Name = "lieu" Then
Set pDispTable2 = latable
Set matable = pDispTable2.DisplayTable
Set pSelItem = pDispTable2
Exit For
End If
Next i
champ1 = "id_commune"
champ2 = "id_commune"
Set pMemRelFact = New MemoryRelationshipClassFactory
Set pRelClass = pMemRelFact.Open("LayerToTable", matable, champ1, matable_commune, champ2, "forward", "backward", esriRelCardinalityOneToMany)
Set pDispRC = pSelItem
pDispRC.DisplayRelationshipClass pRelClass, esriLeftInnerJoin
champ1 = "commune.id_dep"
champ2 = "id_dep"
Set pMemRelFact = New MemoryRelationshipClassFactory
Set pRelClass = pMemRelFact.Open("LayerToTable", matable, champ1, matable_dep, champ2, "forward", "backward", esriRelCardinalityOneToMany)
Set pDispRC = pSelItem
pDispRC.DisplayRelationshipClass pRelClass, esriLeftInnerJoin
End SubHors ligne
#2 Fri 12 August 2011 14:38
- tnicolas
- Participant actif
- Date d'inscription: 18 Apr 2007
- Messages: 64
Re: [ArcGis 9.1] jointure VBA
En fait je voulais démonter et remonter des jointures pour pouvoir mettre à jour la table lieu. J'ai réussi à trouver une méthode pour pouvoir mettre à jour sans démonter les jointures en passant par le calculator.
Hors ligne


