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

Access Discussion :

[Champs] Renommer en masse les champs/tables


Sujet :

Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut [Champs] Renommer en masse les champs/tables
    Bonjour

    Je souhaite migrer une base de données Access 2003 en Hyperfile (Windev 11).

    La migration se fait automatiquement, seul problème (mais entraînant l'échec de la migration) : les caractères spéciaux "°", "/" ou encore "-" dans les noms des champs et tables sont refusés par Windev.

    Or, j'ai ainsi des centaines de champs/tables à renommer dans Access (cas typique : les champs numériques sont toujours intitulés "N° xxx", à remplacer par exemple par "Num xxx").

    Existe-t-il un moyen d'automatiser ce renommage en masse ? (en impactant également les requêtes)

    En vous remerciant par avance pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je n'ai jamais fait ce genre de manipulations, mais avec DAO, je pense que c'est jouable.

    Christophe Warin a fait un tuto sur le DAO ici
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci de m'avoir donné cette piste, ne connaissant pas Access, je ne connaissais pas DAO

    Alors autrement dit, il y aurait moyen que je fasse une "moulinette" à partir de ce code par exemple ? :
    4.3.4.2. Renommer une table
    4.4.4.1. Renommer un champ

  4. #4
    jfc
    Invité(e)
    Par défaut
    Tu peux aussi utiliser FindAndReplace de http://www.rickworld.com/

    Ce n'est pas un freeware, mais cet outil offre de nombreux avantages au développeur.

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Correct, avec tableDef et Querrydef, tu peux automatiser la chose.

    En plus, DAO est un outil très puissant, même au niveau des données.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par jfc
    Tu peux aussi utiliser FindAndReplace de http://www.rickworld.com/

    Ce n'est pas un freeware, mais cet outil offre de nombreux avantages au développeur.
    Un "concurrent" gratuit :

    http://www3.bc.sympatico.ca/starthere/findandreplace/

    Je l'ai testé : simple à installer et à utiliser, mais de nombreux plantages et une fois arrivé tant bien que mal à la fin du renommage, Windev plante lors de la migration de la BdD ainsi retouchée !

    Je regarde donc du côté de DAO...

  7. #7
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je regarde donc du côté de DAO...
    Bon investissement.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    J'ai tenté le renommage sur un champ avec TableDef, et j'ai l'erreur suivante :

    "3057 - Opération non gérée sur des tables attachées."

    Je suppose que cela sous-entend que des liaisons conceptuelles ont été définies entre les tables de cette base de données ?

    Une idée pour contourner le problème ?

  9. #9
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    C'est que les tables ne sont pas présentes dans ta base de données et qu'elles sont dans une base distante avec une liaison.

    Pour renommer les champs et les tables, il faut être dans la DB.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    ok merci pour cette explication claire !

    effectivement, c'était ça, le renommage a fonctionné en créant le formulaire au bon endroit lol

    cette après-m', je regarde comment lister automatiquement tous les noms des champs (de toutes les tables) afin d'appliquer le renommage partout.

    bon appétit !

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    C'est bon, ma moulinette a marché

    la voici si elle peut servir à qqun d'autre :

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    Option Compare Database
     
    Private Function RenommerChamp(oBaseDeDonnees As DAO.Database, strNomTable As String, _
      strAncienNomChamp As String, strNouveauNomChamp As String, ByVal NumFicLog As Integer) As Boolean
     
    On Error GoTo err
     Dim Tbl As DAO.TableDef
     
     'Récupère la table
     Set Tbl = oBaseDeDonnees.TableDefs(strNomTable)
     'Renomme le champ
     Tbl.Fields(strAncienNomChamp).Name = strNouveauNomChamp
     'Renvoie True
     RenommerChamp = True
     
     ' Fichier Log complété pour le suivi
     Print #NumFicLog, "Table : " & strNomTable & " - Champ : " & strAncienNomChamp & " remplacé par : " & strNouveauNomChamp
     
     'Gère les erreurs
     Exit Function
    err:
        Select Case err.Number
         'Si impossible de trouver l'élément dans la collection
         Case 3265
          'Si tbl=nothing alors tbl est la cause de l'erreur
          If Tbl Is Nothing Then
            MsgBox "Impossible de trouver la table : " & strNomTable
          Else
            MsgBox "Impossible de trouver le champ : " & strAncienNomChamp
          End If
          Case 3010, 3191: MsgBox "Le champ " & strNouveauNomChamp & " existe déjà"
          Case Else
            ' Fichier Log complété avec cette erreur
            Print #NumFicLog, "Une erreur inattendue est survenue - Détail technique : " & err.Number & " - " & err.Description
        End Select
    End Function
     
    '** Fonction de remplacement des occurences d'une sous-chaîne
    '** par une autre sous-chaîne dans une chaîne de caractères
    '** Retourne la nouvelle chaîne de caractères ainsi obtenue
    Function RemplaceChaine(ByVal Texte As String, ByVal ChAnc As String, ChNew As String) As String
    Dim PosDepart       As Long  ' position où débute la recherche d'une chaîne à remplacer
    Dim PosChAnc        As Long  ' position début d'une chaîne à remplacer, = 0 si non trouvée
     
        RemplaceChaine = Texte
        PosDepart = 1
        Do Until PosDepart > Len(RemplaceChaine)
            PosChAnc = InStr(PosDepart, RemplaceChaine, ChAnc, 1)
            If PosChAnc <> 0 Then   ' ChAnc trouvée, on la remplace par ChNew
                RemplaceChaine = Left(RemplaceChaine, PosChAnc - 1) & ChNew _
                    & Right(RemplaceChaine, Len(RemplaceChaine) - PosChAnc - Len(ChAnc) + 1)
                PosDepart = PosChAnc + Len(ChNew)
            Else                    ' Pas ou plus de ChAnc dans Texte, on sort
                Exit Function
            End If
        Loop
    End Function
     
    Function RemplaceCarSpeciaux(ByVal Chaine As String) As String
        RemplaceCarSpeciaux = RemplaceChaine(Chaine, "°", "o")
        RemplaceCarSpeciaux = RemplaceChaine(RemplaceCarSpeciaux, "'", " ")
        RemplaceCarSpeciaux = RemplaceChaine(RemplaceCarSpeciaux, "/", " ")
        RemplaceCarSpeciaux = RemplaceChaine(RemplaceCarSpeciaux, "-", " ")
    End Function
     
    Private Sub Commande0_Click()
        Dim db As DAO.Database, tdf As DAO.TableDef, fld As DAO.Field
        Dim strDescription As String
        Dim NumFicLog As Integer
     
        ' Ouverture en écriture du fichier Log pour le suivi
        NumFicLog = FreeFile
        Open "C:\renommage.log" For Output As NumFicLog
     
        Set db = CurrentDb
     
        On Error GoTo GestionErreur
     
        For Each tdf In db.TableDefs ' Pour chaque Table
          For Each fld In tdf.Fields ' Pour chaque Champ de la Table courante
            strDescription = fld.Properties("Description")
     
            If RenommerChamp(db, tdf.Name, fld.Name, RemplaceCarSpeciaux(fld.Name), NumFicLog) = False Then
                'If MsgBox("Continuez le traitement malgré cette erreur ?", vbOKCancel, "Erreur renommage") = vbCancel Then
                '    Close #NumFicLog
                '    Exit Sub
                'End If
            End If
     
            Next fld
        Next tdf
     
        MsgBox ("Renommage terminé !")
     
        Set fld = Nothing
        Set tdf = Nothing
        Set db = Nothing
     
        Close #NumFicLog
     
        Exit Sub
     
    GestionErreur:
        Select Case err.Number
          Case 3270
            strDescription = ""
            Resume Next
          Case Else
            MsgBox "Erreur num. " & err.Number & " : " & err.Description, vbCritical
        Set fld = Nothing
        Set tdf = Nothing
        Set db = Nothing
        Close #NumFicLog
        Exit Sub
        End Select
    End Sub
    L'import dans Windev 11 se fait sans message d'erreur cette fois-ci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2014, 09h19
  2. Réponses: 12
    Dernier message: 12/07/2011, 18h19
  3. basculer entre les champs de texte avec les flèches du clavier
    Par limy9 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 24/01/2011, 15h49
  4. inverser les champs des lignes vers les colonnes dans un XML
    Par almanar dans le forum Général Python
    Réponses: 0
    Dernier message: 19/02/2010, 21h04
  5. [MySQL] verifier si les champs sont correct et les comparer a la bdd
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 31/03/2006, 13h36

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