IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Génération automatique d'index en VBA


Sujet :

VBA Access

  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Par défaut Génération automatique d'index en VBA
    Bonjour à tous,

    Mon problème actuel est le suivant:
    Nous avons récemment migré notre application Access vers SQL Server. Pour le moment, nous continuons d'utiliser des .mdb, peut-être passerons-nous plus tard en .adp.

    Les tables ont été migrées dans SQL Server ainsi qu'un certain nombre de vues.

    La procédure permettant de créer les liens vers les tables et les vues de SQL Server est développée en VBA.

    La liaison des tables dans Access s'effectue correctement. Par contre, lorsque l'on veut lier les vues (comme des tables), Access nous demande, pour chaque vue, de sélectionner le ou les champs constituant la clé primaire de la table.

    Je souhaiterais pouvoir automatiser cette étape en indiquant directement dans le code VBA la clé primaire.

    N'y arrivant pas, nous avons essayé, après avoir effectué le lien des vues sans indiquer d'index, de recréer automatiquement les index en VBA mais cela engendre une erreur (index déjà existant ou trop d'index sur la table alors qu'aucun index n'a été créé).

    Quelqu'un peut-il m'éclairer?

    Gretch_34

  2. #2
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Salut,

    Tu as dans la FAQ une partie de la réponse à ta 1ère question
    Je souhaiterais pouvoir automatiser cette étape en indiquant directement dans le code VBA la clé primaire.

  3. #3
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Par défaut
    Oui, je te remercie. Le problème est de savoir comment faire comprendre à Access, lorsqu'on fait le lien en VBA, quels champs de la vue SQL Server constituent la clé primaire.

    Aujourd'hui, nous n'avons d'autre choix que de les ajouter à la main (environ 150 vues à chaque fois...)

    Ce problème se pose également si on veut lier manuellement des tables d'une base de données MySQL (par exemple). A chaque table, Access ouvre une boite de dialogue contenant la liste des champs de la table et on doit sélectionner le ou les champs qui forment la clé.

    Est-il possible de coder cela en VBA?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Bonjour,

    J'utilise une application MDB pour recréer les tables liées, dans une autre application "cible".
    L'application contient une table où sont listées toutes les tables liées à recréer dans la cible.
    Pour certaines tables liées, il est possible de créer une pseudo clé primaire qui est en fait un index généré dans le fichier MDB cible.

    Structure de la table des tables liées:



    Code VBA:

    Code pour "piloter" la création des tables liées dans le MDB cible oAppTarget.
    Il faut renseigner sPath avec le chemin du fichier MDB cible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim sAppPath As String, oAppTarget As Access.Application
     
    ' Accéder au  projet "cible"
    sPath = ".........."
    Set oAppTarget = VBA.GetObject(sPath, "Access.Application")
     
    ' Créer les tables liées
    CreateLinkedTables "LINKED_TABLES", Application.CurrentDb, oAppTarget.CurrentDb, True
    Procédure CreateLinkedTables() qui réalise la "création" des tables liées.

    * Si le champ CONNECT_STRING contient un nom d'utilisateur et un mot de passe, ils seront conservés et automatiquement utilisés dans l'application MDB cible.
    * Pour créer une clé primaire, il faut renseigner le champ PSEUDO_INDEX_NAME avec le nom du nouvel index (je mets toujours PrimaryKey).
    * Si l'index comporte plusieurs champs, les noms de ces champs sont listés dans le champ PSEUDO_INDEX_FIELDS et doivent être séparés par des virgules.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    ' Création de tables liées dans une BD ciblée (oTargetDB).
    ' La liste des tables est issue de la source de données sDataSource dans une BD source.
    '
    ' La structure de sDataSource doit être conforme à celle attendue:
    '   Au moins 3 champs dont les noms sont listés ci-dessous
    '   * CONNECT_STRING
    '   * LOCAL_NAME
    '   * REMOTE_NAME
    '   * PSEUDO_INDEX_NAME
    '   * PSEUDO_INDEX_FIELDS
    '
    Public Sub CreateLinkedTables(sDataSource As String, _
                                oSourceDB As DAO.Database, _
                                oTargetDB As DAO.Database, _
                                Optional bDeleteBefore As Boolean = False)
        Dim oRS As DAO.Recordset, oTD As DAO.TableDef
        Dim sConnect As String, sLocal As String, sRemote As String
        Dim sIndex As String, sFields As String, SQL As String
     
        On Error GoTo 0
     
        Set oRS = oSourceDB.OpenRecordset(sDataSource, dbOpenSnapshot)
     
        Do Until oRS.EOF
            sConnect = oRS!CONNECT_STRING
            sLocal = oRS!LOCAL_NAME
            sRemote = oRS!REMOTE_NAME
            sIndex = Nz(oRS!PSEUDO_INDEX_NAME, vbNullString)
            sFields = Nz(oRS!PSEUDO_INDEX_FIELDS, vbNullString)
     
            ' Effacer d'éventuelles tables attachées + Resume next
            If bDeleteBefore Then
                On Error Resume Next
     
                oTargetDB.TableDefs.Delete sLocal
                oTargetDB.TableDefs.Refresh
            End If
     
            On Error GoTo 0
     
            If sConnect Like "ODBC;*" Then
                Set oTD = oTargetDB.CreateTableDef(sLocal, dbAttachSavePWD, sRemote, sConnect)
            Else
                Set oTD = oTargetDB.CreateTableDef(sLocal)
                oTD.SourceTableName = sRemote
                oTD.Connect = sConnect
            End If
            oTargetDB.TableDefs.Append oTD
            Set oTD = Nothing
     
            If LenB(sIndex) > 0 And LenB(sFields) > 0 Then
                SQL = "CREATE INDEX [" & sIndex & "] ON [" & sLocal & "] (" & sFields & ") WITH PRIMARY"
                oTargetDB.Execute SQL
            End If
     
            oRS.MoveNext
        Loop
     
        oTargetDB.TableDefs.Refresh
     
        oRS.Close
        Set oRS = Nothing
    End Sub

  5. #5
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Par défaut Génération automatique d'index en VBA
    Salut =JBO=,

    Un grand merci car ta technique fonctionne !!!

    @ bientôt

    Gretch_34

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Génération automatique Property (getter / setter)
    Par Husqvarna dans le forum Windows Forms
    Réponses: 7
    Dernier message: 23/07/2020, 11h55
  2. [getters] génération automatique...
    Par phoebe dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 04/10/2005, 17h43
  3. [INFO]Génération automatique de pages HTML
    Par GreenJay dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 28/09/2005, 16h29
  4. [Plugin]Gestion de génération automatique de code
    Par Maggic dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 11/05/2004, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo