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 :

Probleme requete SQL guillemets replace() [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Probleme requete SQL guillemets replace()
    * Bonjour, *

    Comme demandé, je sépare ma demande en plusieurs partie:



    Je dois réaliser une base de données qui mets à jour son contenu en fonction de fichiers excels sur le réseau. Il y à plus de 2000 lignes.Les données sont répartis sur une feuille avec plusieurs colonne:exemple


    :: Contract :: adresse :: id-national:: type de site:: commune
    123 nancy brabois, 34 PRT Nancy
    "le vélodrome" 54000
    143 Metz, chaplerue 1234 bos Metz
    J'ai réussi a développer une fonction en sql qui me permet de mettre à jour ma table, Cependant comme les colonnes sont séparées et nombreuses la fonction est devenue longue meme si son action est simple.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set oApp = CreateObject("excel.application")
    Set oWkb = oApp.Workbooks.Open(result) 'mettez ici le chemin vers votre fichier Excel
    Set oWSht = oWkb.Worksheets(result2) 'mettez ici le nom de la feuille qui contient les données à importer
     
     While oWSht.Range("C" & i).Value <> "" '(où C représente la colonnede Id national et i la ligne)
        If DCount("*", "[T_Importation_PPV_Alsace_Lorraine]", "[ID national site] LIKE '" & oWSht.Cells(i, 1) & "'") = 0 Then
            'cSQL = " insert into [T_Importation_PPV_Alsace_Lorraine] ( [Délégation], [Centre régional],[ID national site], [Nom du site], [Contractant], [Commune], [code INSEE], [Type de site], [Fililale], [Adresse], [identifiant libre local], [Domaine Fonctionnel], [Champ13] ) values ("" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 4) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 5) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 6) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 7) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 8) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 10) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 11) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 14) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 34) & Chr(34) & "", "" & Chr(34) & oWSht.Cells(i, 35) & Chr(34) & "");"
            cSQL = " insert into [T_Importation_PPV_Alsace_Lorraine] ( [Délégation], [Centre régional],[ID national site], [Nom du site], [Contractant], [Commune], [code INSEE], [Type de site], [Fililale], [Adresse], [identifiant libre local], [Domaine Fonctionnel]) values (" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 4) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 5) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 6) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 7) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 8) & Chr(34) & "," & Chr(34) & oWSht.Cells(i, 10) & Chr(34) & ", "" & oWSht.Cells(i, 11)  &"", " & Chr(34) & oWSht.Cells(i, 14) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 34) & Chr(34) & ");"
            comptagenouveau = comptagenouveau + 1
            DoCmd.RunSQL cSQL
        End If
         If DCount("*", "[T_Importation_PPV_Alsace_Lorraine]", "[ID national site] LIKE '" & oWSht.Cells(i, 1) & "'") = 1 Then
          End If

    Le problème est : Lors de l'importation des cellules du excel vers access, il y à certaines donnés qui comportent des guillemets pour indiquer un lieu dit dans les adresses

    (Exemple: nancy brabois,"le vélodrome" 54000)



    C'est en parcourant ce style de donnés que la requête plante, Cependant je voudrais réussir à importer cette données


    Pour cela j'ai essayer la technique des doubles guillemets, et celle des char(34) toutefois cela ne marche pas ou l'ai je mal réalisé.

    J'ai vu sur plusieurs post qu'il existe la méthode Replace notamment comme on me la conseillé dans mon précédent post mais je ne vois pas comment l'adapter pour pouvoir l'intégrer à ma fonction.

    Je remets un lien vers mon ancien post si vous désirez voir ma fonction dans son ensemble.

    http://www.developpez.net/forums/d11...r-chariot-vba/

    * Merci *

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 627
    Points : 34 330
    Points
    34 330
    Par défaut
    Salut,

    essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace(cequetudoischanger,"'","''")
    pour les quotes. Le mieux étant tout de meme de passer en revue le cSQL avant son exécution avec un Debug.Print
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    As-tu essayé d'utiliser la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace ('Ta variable contenant texte', """", chr(34))
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Je suis d'accord avec vous sur cette solution cependant je ne vois pas trop comment l'inserer dans ma premiere requete.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cSQL = " insert into [T_Importation_PPV_Alsace_Lorraine] ( [Délégation], [Centre régional],[ID national site], [Nom du site], [Contractant], [Commune], [code INSEE], [Type de site], [Fililale], [Adresse], [identifiant libre local], [Domaine Fonctionnel]) values (" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 4) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 5) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 6) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 7) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 8) & Chr(34) & "," & Chr(34) & oWSht.Cells(i, 10) & Chr(34) & ", " & Replace(Chr(34) & oWSht.Cells(i, 11) & Chr(34) ,'''',ch(34)) & ", " & Chr(34) & oWSht.Cells(i, 14) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 34) & Chr(34) & ");"

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 627
    Points : 34 330
    Points
    34 330
    Par défaut
    On ne connait pas mieux que toi tes données, alors un exemple et tu adaptes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Replace(monchamp,"""", chr(34)) FROM MaTable;
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  6. #6
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Je le verrai sur quelque chose comme cela :

    A la place de :
    Tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace (oWSht.Cells(i, 1), """", chr(34))
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    toujours la même erreur

    dans ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cSQL = " insert into [T_Importation_PPV_Alsace_Lorraine] ( [Délégation], [Centre régional],[ID national site], [Nom du site], [Contractant], [Commune], [code INSEE], [Type de site], [Fililale], [Adresse], [identifiant libre local], [Domaine Fonctionnel]) values (" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 4) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 5) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 6) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 7) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 8) & Chr(34) & "," & Chr(34) & oWSht.Cells(i, 10) & Chr(34) & ", "& char(34) & oWSht.Cells(i, 11)  &char(34) &", " & Chr(34) & oWSht.Cells(i, 14) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 34) & Chr(34) & ");"
                    DoCmd.RunSQL cSQL


    La partie adresse pour etre précis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "char(34) & oWSht.Cells(i, 11)  &char(34) &",
    quand j'écris de cette maniere et que j'importe de EXcel les contenu des cellules pa re exemple la celulle contenant : "rue de la garenne en barrois" en barrois
    Cela me sort erreur 3075 erreur de syntaxe dans l'expression "' Rue de la garenne " en barrois ""'


    Si je doubles les guillemets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "" &char(34) & oWSht.Cells(i, 11)  &char(34) & "",


    Cela marche mais quand je vais dans ma table toutes mes valeurs de ma colonne sont remplis par &char(34) & oWSht.Cells(i, 11) &char(34) &

    J 'ai essayer avec Replace mais je ne peux l'executer que apres l'importation or sa plante au niveau de l'importation , je ne peux modifier le contenu de mon excel.

    J

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 627
    Points : 34 330
    Points
    34 330
    Par défaut
    Chr() et non pas char()
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci je l'avais pas vu.

    Au final j'y suis parvenu en modifiant ma requetes en prenant la fonction que j'avais trouvé sur microsoft. Donc voici la réponse , mais merci tout le monde pour m'avoir aidé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cSQL = " insert into [essai] ( [Délégation], [Centre régional],[ID national site], [Nom du site], [Contractant], [Commune], [code INSEE], [Type de site], [Fililale], [Adresse], [identifiant libre local], [Domaine Fonctionnel]) values (" & Chr(34) & oWSht.Cells(i, 1) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 2) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 3) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 4) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 5) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 6) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 7) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 8) & Chr(34) & "," & Chr(34) & oWSht.Cells(i, 10) & Chr(34) & "," & Chr(34) & ChangeStr(oWSht.Cells(i, 11), Chr(34), "  ", 0) & Chr(34) & "," & Chr(34) & oWSht.Cells(i, 14) & Chr(34) & " , " & Chr(34) & oWSht.Cells(i, 34) & Chr(34) & ");"
    DoCmd.RunSQL cSQL

    et la fonction
    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
    Function ChangeStr(strOriginal As Variant, strOldChar As String, strNewChar As String, intMatchCase As Integer) As Variant
       ' This function changes all substrings strOldChar in string strOriginal
       ' to strNewChar.
       ' The parameter intMatchCase has the same purpose as in the
       ' InStr() function, i.e. 1 makes the function case-sensitive, 0 does not
       Dim temp As String, pos As Integer
       temp = ""
       If IsNull(strOriginal) Then
          ChangeStr = Null
          Exit Function
       End If
       If strOldChar = "" Or strOriginal = "" Then
          ChangeStr = strOriginal
          Exit Function
       End If
     
       pos = InStr(1, strOriginal, strOldChar, intMatchCase)
       While pos > 0
          temp = temp & Mid$(strOriginal, 1, pos - 1) & strNewChar
          strOriginal = Right$(strOriginal, Len(strOriginal) - pos - Len(strOldChar) + 1)
          pos = InStr(1, strOriginal, strOldChar, intMatchCase)
       Wend
       ChangeStr = temp & strOriginal
    End Function
    merci

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

Discussions similaires

  1. [MySQL] Probleme requete sql et code html
    Par needles94000 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/03/2006, 17h38
  2. [Access] Probleme requete SQL
    Par kissmytoe dans le forum Langage SQL
    Réponses: 11
    Dernier message: 24/02/2006, 15h25
  3. probleme requete SQL
    Par grochenel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/12/2005, 09h26
  4. [MySQL] probleme requete sql et php
    Par digger dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/10/2005, 14h15
  5. probleme requete sql
    Par Shosho dans le forum Langage SQL
    Réponses: 12
    Dernier message: 03/05/2005, 09h25

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