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 :

Modif auto structure (accent, espace) / routine


Sujet :

Access

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Par défaut Modif auto structure (accent, espace) / routine
    Bonjour

    Je dois migrer une appli access, en sql server.
    Hors cette base a de nombreuses erreurs de conceptions.
    Comme les espaces et accents dans les tables, et pire encore dans les champs.
    Donc idem, dans les reqêtes, idem dans les formulaires, idem dans les états, macros.

    Avez vous un moyen pour modifier sur l'ensemble de la structure?

    Une sorte de controle + H magique?

    merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Par défaut
    j'ai déjà pensé à modifier dans les tables systèmes.

    Mais on peut pas faire de modif dedans.
    De toute facon, cela ne m'aurait permis que de modifier les noms des objets et non leur contenu.

    Pour les requtes, je vois à peu près comment faire par le code, en rappatriant le code sql de chaque requete, en le modifiant avec des REPLACE, puis créer une nouvelle requete avec le contenu modifié.

    Les macros peuvent être converti en code, donc ca restera faisable, laborieux mais faisable.

    Mais pour les tables, forms, etat.


    ps: sous access97.

  3. #3
    Membre éclairé Avatar de Jahprend
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 255
    Par défaut
    Tu cherches un moyen de d'enlever toute tes mauvaises occurences? (genre ponctuations etc..) Si oui je crois qu'il faut acheté une baguette magique

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Par défaut
    oui c'est ca

    par ex :

    table

    table [liste des salariés] (avec espace et accent)
    [liste des salariés].[Prénom]
    [liste des salariés].[Date de naissance]

    ...

    Donc tous les objets de la bases y faisant référence sont à modifier.

    Bonjour l'angoisse.

    Ma piste vous semble t'elle totalement irréalisable?
    Pourrait elle s'appliquer aux forms, etat?

  5. #5
    Membre éclairé Avatar de Jahprend
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 255
    Par défaut
    Moi je suis assez mauvais pour te dire que c'est difficile je pense^^

  6. #6
    Expert confirmé
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Par défaut
    Salut,

    Je pense que le solution la plus simple ctrl + H

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Par défaut
    Via le code je pourrais:
    * modifier le nom des tables et champs (caractère accentué + esapce)
    * modifier les accents des requetes (recuperer le code, créer une requete, supprimer l'ancienne)
    * migrer les macros en code vba et faire du ctrl H.

    Est il possible de changer la source des formulaires et états via vba?
    Est il possible de lister les champs d'un formulaire/etat et d'agir sur leur source?

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Je pense que ce genre de choses pourrait franchement t'aider (à adapter pour que ça réponde à ton besoin) :

    - http://access.developpez.com/sources...eChaineRequete
    - http://access.developpez.com/sources...RefreshAllList

    Si tu as besoin que je t'éclaire sur la façon dont tu peux utiliser ça pour ton cas, redemande. Si tu vois de suite de quoi il s'agit, bon code !

    j'oubliais, pour le parcours des contrôles d'un formulaire, la version que je t'ai linkée ne marche que sur un formulaire ouvert. Cependant à partir d'Access 2000, tu peux parcourir tous les formulaires de ta base via la collection < Allforms >

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Par défaut
    Citation Envoyé par vmolines
    Je pense que ce genre de choses pourrait franchement t'aider (à adapter pour que ça réponde à ton besoin) :

    - http://access.developpez.com/sources...eChaineRequete
    - http://access.developpez.com/sources...RefreshAllList

    Si tu as besoin que je t'éclaire sur la façon dont tu peux utiliser ça pour ton cas, redemande. Si tu vois de suite de quoi il s'agit, bon code !

    j'oubliais, pour le parcours des contrôles d'un formulaire, la version que je t'ai linkée ne marche que sur un formulaire ouvert. Cependant à partir d'Access 2000, tu peux parcourir tous les formulaires de ta base via la collection < Allforms >

    oui je veux bien plus d'infos.

    par ex: pour modifier les tables et champs voila ce que j'ai fait:

    Public Sub pus_ModifStructure()

    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field
    Dim qdf As DAO.QueryDef
    Set db = CurrentDb()

    ' On parcours les tables de la base de données -----------------------------------------------
    ' Pour chaque table différente des tables systèmes
    For Each tdf In db.TableDefs
    If Left(tdf.Name, 4) <> "MSYS" Then

    ' Renommage des champs de cette table
    For Each fld In tdf.Fields
    fld.Name = puf_RemplaceBasiqueDansChaineLesCaracteresSuivants(fld.Name)
    Next fld

    ' Renommage du nom de cette table
    tdf.Name = puf_RemplaceBasiqueDansChaineLesCaracteresSuivants(tdf.Name)

    End If
    Next tdf
    ' ----------------------------------------------- On parcours les tables de la base de données


    For Each qdf In db.QueryDefs
    MsgBox qdf.Name
    MsgBox qdf.SQL
    ' code pour modifer ma requete comme pour les rtables


    Next qdf

    Set db = Nothing



    End Sub
    Avec pour remplacer:
    Public Function puf_RemplaceBasiqueDansChaineLesCaracteresSuivants(ByVal psChaineATester As String) As String
    Dim wChaine As String

    wChaine = psChaineATester

    wChaine = ReplaceA97(wChaine, "à", "a")
    wChaine = ReplaceA97(wChaine, "é", "e")
    wChaine = ReplaceA97(wChaine, "è", "e")
    wChaine = ReplaceA97(wChaine, "ê", "e")
    wChaine = ReplaceA97(wChaine, "î", "i")
    wChaine = ReplaceA97(wChaine, "ï", "i")
    wChaine = ReplaceA97(wChaine, " ", "_")
    wChaine = ReplaceA97(wChaine, "-", "_")
    wChaine = ReplaceA97(wChaine, "°", "o")
    wChaine = ReplaceA97(wChaine, "ô", "o")
    wChaine = ReplaceA97(wChaine, "ù", "u")
    wChaine = ReplaceA97(wChaine, "û", "u")
    wChaine = ReplaceA97(wChaine, "'", "_")

    puf_RemplaceBasiqueDansChaineLesCaracteresSuivants = wChaine

    End Function
    Le problème dans mon code SQL, c'est que je ne pourrais pas modifier les espaces.
    Car il y en a avant et après les mots clé.
    Donc je pense mal m'y prendre.

    en tout cas, merci de te pencher sur mon pb.

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Pour faire de la recherche intelligente dans les chaines de caracteres je te conseille d'utiliser les expressions régulières :

    http://cafeine.developpez.com/access/tutoriel/regexp/

    Si je ne me trompe pas, les tables et champs contenant des espaces doivent être encadrés par des crochets dans le sql de tes requêtes. Or avec une recherche replace simple, il est vrai que tu ne peux pas détecter les espaces entres crochets. Avec les expressions régulières, tu vas disposer d'un outil plus puissant d'analyse et remplacement syntaxique.

    En espérant que ça t'aide

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Par défaut
    Citation Envoyé par vmolines
    ...
    Si je ne me trompe pas, les tables et champs contenant des espaces doivent être encadrés par des crochets dans le sql de tes requêtes. ...
    Apparemment c'est bien ca.

    Je vais creuser sur cette méthode afin d'isoler les mots clés pour la gestion des espace.

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Par défaut
    merde je n'ai pas la référence citée dans a97.
    il n'y a pas un autre moyen?

  13. #13
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Si je regarde dans la liste des références dispo, j'ai Microsoft VBScript Regular Expressions 1.0 et 5.5. Le chemin est : C:\Windows\System32\vbscript.dll

    Si tu ne l'as pas, je pense que rien ne t'empèche de télécharger cette dll et de l'ajouter via le bouton parcourir de la fenetre des références.

    En tout cas les reg exp c'est fais exprès pour ce genre de travail, et si tu fais sans, je pense que tu vas vraiment avoir du mal à trouver les bonnes occurences. Aussi je te conseille d'essayer de les faire fonctionner.

    Cordialement.

    Je viens de faire une recherche rapide sur google pour voir si tu pouvais utiliser cette référence en Access 97. Apparemment c'est pas directement possible mais y'a des moyens de contourner. Je te laisse approfondir.

    Comme j'étais lancé, j'ai terminé la recherche :

    http://groups.google.com/group/comp....d07a08ad8f968a

    J'espère que t'es pas allergique à l'anglais pour suivre la méthode afin d'utiliser les regexp dans ton access 97.

    Hope this helps

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Par défaut
    Salut,

    Juste une idée (je croix l'avoir lu dans un autre post mais je sais plus où).
    Pour éviter de renommer tous tes champ et nom de table, pourquoi ne pas :
    - migrer vers SQL avec des nom "propres"
    - faire une base avec des tables liées au tables de SQLserveur et des requetes qui ne font que renomer tes champs (avec espaces et accents). Donne à tes requete les nom d'origine de ta base (avec espaces et accents).
    - lier ta base frontale non pas avec SQLserveur mais à ta base intermédiaire.

    Cela éviterait d'avoir à modifier toutes tes requetes, ton code etc.

    Qu'en pensez vous ?
    Faisable ? Performences ?

    A+

  15. #15
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Ben ça fait totalement perdre l'intérêt d'une migration SQL Server si on se contente d'y lier des tables access... Oo peut-être me trompais-je.

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Par défaut
    encore merci

    Pour les requetes, je vais m'y plonger à tete reposée.

    J'abuse un peu ;o) mais
    pour les forms, et etats, tu as des pistes?

  17. #17
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 402
    Par défaut
    le but final est bien de migrer (la partie data) vers sql server.

    Donc en effet, les noms des requetes, il y a peu d'interet de les migrer.
    En fait si, il y en a un.
    Afin de migrer les sources des forms et etats qui certains se basent sur des requete.
    Donc l'idée serait de remplacer via le code, les sources des forms/etats.
    en virant les caractères accentués et les espaces.

Discussions similaires

  1. [SQL2K] Répercuter les modifications de structure
    Par frechy dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/02/2007, 15h18
  2. Modif auto taille max d'une base
    Par al1EnC dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/11/2006, 15h36
  3. [RegEx] Expression rationnelle avec accents, espace et apostrophe.
    Par psychoBob dans le forum Langage
    Réponses: 12
    Dernier message: 24/04/2006, 15h21
  4. [XSL-FO] Modifer une structure de tableau dans for-each
    Par serwol dans le forum XSL/XSLT/XPATH
    Réponses: 24
    Dernier message: 17/06/2005, 17h38
  5. Modification auto du corps d'un mail envoyé via Lotus Note
    Par DeepXtaZy dans le forum VBA Access
    Réponses: 5
    Dernier message: 20/06/2003, 11h33

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