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

Requêtes et SQL. Discussion :

Remplacer une série de chaines de caratères => Erreur de syntaxe: DoCmd.RunSQL UPDATE Replace [AC-2007]


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut Remplacer une série de chaines de caratères => Erreur de syntaxe: DoCmd.RunSQL UPDATE Replace
    Bonjour,

    pour une étape centrale de mon projet, je cherche le moyen d'extraire des noms de société des "Tag Words" significatifs.
    Pour cela, je doit f=remplacer une série de chaines de caractères pour supprimer les mentions complémeenatires de sociétés (telles que SA, SAS, Ltd, Limited, GmbH, etc...).

    Sur Excel, cela donne, par exemple (et ça marche):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Sub Remplacer()
     
        Selection.Replace What:=" I/S", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Selection.Replace What:=" a.m.b.a ", Replacement:=" ", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
     
    End Sub
    En passant à ACCESS, j'ai vu que la fonction Replace existe dans les requêtes, et j'ai pu créer manuellement des requêtes de mise à jour qui fonctionnent (une requête par remplacement),
    dont le code SQL donne, par exemple (ici, remplacement de " B.V. " par " "):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE [Contacts to Treat] SET [Contacts to Treat].[Tag Words] = Replace([Treated Account Name]," B.V. "," ");

    Mais, ayant plus d'une centaine de remplacemlents à faire (tous déjà codés en VBA pour EXCEL), je me vois mal créer manuellement une centaine de requête à la main !
    Après beaucoup de recherches, prenant exemple sur http://www.developpez.net/forums/d44...xe-update-vba/, j'ai essayé d'inclure le code SQL généré par Access dans un code VBA en utilisant DoCmd.RunSQL.
    Cela donne ça:

    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
    Public Sub Building_Tag_Words()
    On Error GoTo Building_Tag_Words_Err
    
        DoCmd.SetWarnings False
    
    DoCmd.RunSQL ("UPDATE [Contacts_to_Treat] SET [Contacts_to_Treat].[Tag_Words] = Replace([Treated_Account_Name]," B.V. "," ");)
    DoCmd.RunSQL ("UPDATE [Contacts_to_Treat] SET [Contacts_to_Treat].[Tag_Words] = Replace([Treated_Account_Name]," I/S"," ");
    ")
    DoCmd.RunSQL ("UPDATE [Contacts_to_Treat] SET [Contacts_to_Treat].[Tag_Words] = Replace([Treated_Account_Name],"|"," ");
    ")
    DoCmd.RunSQL ("UPDATE [Contacts_to_Treat] SET [Contacts_to_Treat].[Tag_Words] = Replace([Treated_Account_Name]," BV "," ");")
    DoCmd.RunSQL ("UPDATE [Contacts_to_Treat] SET [Contacts_to_Treat].[Tag_Words] = Replace([Treated_Account_Name]," a.p.s "," ");
    ")
    DoCmd.RunSQL ("UPDATE [Contacts_to_Treat] SET [Contacts_to_Treat].[Tag_Words] = Replace([Treated_Account_Name]," aps "," ");")
    
    Building_Tag_Words_Exit:
        Exit Sub
    
    Building_Tag_Words_Err:
        MsgBox Error$
        Resume Building_Tag_Words_Exit
    
    End Sub
    Mais j'ai une erreur de syntaxe pour toutes mes commandes DoCmd.RunSQL avec le message qu'il manque un séparateur ou une parenthèse.

    En suivant le conseil de Mahefasoa, j'ai essayé une autre syntaxe, qui ne marche pas non plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL ("UPDATE Contacts_to_Treat SET Tag_Words= Replace([Treated_Account_Name]," B.V. "," ");)
    Deux questions:
    1/ Quelqu'un peut-il me guider pour corriger la syntaxe si je suis dans la bonne voie.
    2/ Peut-être devrais-je utiliser une méthode complètement différente ?

    Je suis plein d'espooir et de reconnaissance anticipée...

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 123
    Par défaut
    Bonjour,

    Tout d'abord, pour qu'une chaine de caractère contienne une " il faut la doubler (et il devrait toujours y en avoir un nombre pair !!!) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL ("UPDATE [Contacts_to_Treat] SET [Contacts_to_Treat].[Tag_Words] = Replace([Treated_Account_Name],"" B.V. "","" "");")
    Dans le cas présent ça marche aussi comme ça (c'est même plus standard en SQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL ("UPDATE [Contacts_to_Treat] SET [Contacts_to_Treat].[Tag_Words] = Replace([Treated_Account_Name],' B.V. ',' ');")
    Ensuite je préfère cette syntaxe qui permet une gestion d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "UPDATE...", dbFailOnError
    Enfin il est possible de toute faire en une seule requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL ("UPDATE [Contacts_to_Treat] SET [Contacts_to_Treat].[Tag_Words] = MaFonction([Treated_Account_Name]);")
    Ou MaFonction est une fonction publique VBA dans un module qui réalise tous les remplacements possibles

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut Merci nico84
    Merci beaucoup, vraiment.
    C'est le coup de pouce qui me débloque d'un coup.
    Je t'en suis d'autant plus reconnaissant qu'en fait c'est 128 remplacements que je dois gérer ainsi.

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

Discussions similaires

  1. [BASH] Remplacer une série d'espace
    Par Mister_Kp dans le forum Linux
    Réponses: 5
    Dernier message: 10/05/2011, 09h29
  2. [Sed]Remplacer une série d'espaces par un délimiteur
    Par progfou dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 24/01/2011, 15h09
  3. Comment remplacer une partie de chaine ?
    Par malabarbe dans le forum Langage
    Réponses: 9
    Dernier message: 30/10/2009, 02h32
  4. [E-02] Remplacer une partie de chaine de caractère par une autre
    Par lucarno dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/09/2008, 22h19
  5. Remplacer une PARTIE de chaine de caractères dans un champ
    Par Turlututuchapopointu dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/08/2005, 11h57

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