Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#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 Sub

Hors 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

 

Pied de page des forums

Powered by FluxBB