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

VB 6 et antérieur Discussion :

caractère ' (keyascii=39) dans une instruction "INSERT INTO"


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 92
    Points : 54
    Points
    54
    Par défaut caractère ' (keyascii=39) dans une instruction "INSERT INTO"
    bonjour.
    je developpe une application en vb6. ma base de données est en access.
    lorsque je valide un enregistrement avec l'instruction "INSERT INTO ..." ou "UPDATE ...", lorsque l'un des champs contient le caratère ' (keyascii=39), vb me ramène une erreur. que doit je faire pour valider ce caractère

  2. #2
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 112
    Points : 16 645
    Points
    16 645
    Par défaut
    Salut

    Dans la requête il faut entourer se type de caractère de []
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Req = "INSERT INTO ... l[']inconvenient"


    Motif de l'édit:
    Il me semblait bien que j'avais cela quelque par
    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
    Public Function VerifReqt(Req As String) As String
    'pour mettre entre [ et ] un nom de colonne ou un nom de table contenant un caractére engendrant une erreur, ICI le / et ~ (a complèté)
    Dim Deb As Integer, Pos As Integer
    Dim Cpt As Integer
    Dim NotCara(2) As String * 1
    Dim MsgTemp As String
     
    On Error GoTo GestErr
    NotCara(0) = "/": NotCara(1) = "~": NotCara(2) = "'"
    VerifReqt = Req
    For Cpt = 0 To UBound(NotCara)
        Pos = 1: MsgTemp = ""
        If InStr(Pos, Req, NotCara(Cpt)) <> 0 Then
            Do
                Deb = -1
                Pos = InStr(Pos, Req, NotCara(Cpt))
                DoEvents
                Select Case Pos
     
                    Case 0: Exit Do 'le caractère spécial n'est pas contenu dans la phrase
     
                    Case 1
                        ' MsgTemp = "le caractère spécial débute le mot et ce mot débute la phrase"
                        Deb = 1: MsgTemp = RecupMotDebute(Req, Deb, Len(Req))
                        Pos = Fin
                    Case Is > 1
                        If Mid(Req, Pos - 1, 1) = " " Then
                            'MsgTemp = "le caractère spécial débute le mot mais pas la phrase"
                            Deb = Pos: MsgTemp = RecupMotDebute(Req, Deb, Len(Req))
                            Pos = Fin
                            Else
                            If Pos = Len(Req) Then
                                'MsgTemp = "le caractère spécial finit le mot et la phrase"
                                Deb = 1: MsgTemp = RecupMotFinit(Req, Deb, Len(Req))
                                Pos = Fin
                                Else
                                If Mid(Req, Pos + 1, 1) = " " Or Mid(Req, Pos + 1, 1) = "," Then
                                    'MsgTemp = "le caractère spécial finit le mot mais pas la phrase"
                                    Deb = 1: MsgTemp = RecupMotFinit(Req, Deb, Pos)
                                    Pos = Pos + 1
                                    Else
                                    'MsgTemp = "le caractère spécial est contenu dans le mot"
                                    MsgTemp = RecupleMot(Req, Pos)
                                    Pos = Fin
                                End If
                            End If
                        End If
     
                End Select
                Req = Replace(Req, MsgTemp, "[" & MsgTemp & "]")
                Req = Replace(Req, "[[", "[")
                Req = Replace(Req, "]]", "]")
            Loop
        End If
    Next Cpt
    Req = Replace(Req, "[[", "[")
    Req = Replace(Req, "]]", "]")
    VerifReqt = Req
    Exit Function
    GestErr:
    VerifReqt = "False"
    End Function
     
    Private Function RecupMotDebute(Reqt As String, Db As Integer, Fi As Integer) As String
    Dim Cpt0
    For Cpt0 = Db To Fi
        If Mid(Reqt, Cpt0, 1) = " " Or Mid(Reqt, Cpt0, 1) = "," Then
            RecupMotDebute = Mid(Reqt, Db, Cpt0 - Db): Exit For
        End If
    Next Cpt0
    If RecupMotDebute = "" Then RecupMotDebute = Mid(Reqt, Db, Len(Reqt) - (Db - 1))
    Fin = Db + Len(RecupMotDebute) + 1
    End Function
     
    Private Function RecupMotFinit(Reqt As String, Db As Integer, Fi As Integer) As String
    Dim Cpt0
    For Cpt0 = Fi To Db Step -1
        If Mid(Reqt, Cpt0, 1) = " " Or Mid(Reqt, Cpt0, 1) = "," Then
            RecupMotFinit = Mid(Reqt, Cpt0 + 1, Fi - Cpt0): Exit For
        End If
    Next Cpt0
    If RecupMotFinit = "" Then RecupMotFinit = Mid(Reqt, Db, Fi - (Db - 1))
    Fin = Len(Reqt) + 1
    End Function
     
    Private Function RecupleMot(Reqt As String, Posi As Integer) As String
    Dim Cpt0
    Dim MotGauche As String, MotDroite As String
    '<---< remonte la phrase
    For Cpt0 = Posi To 1 Step -1
        If Mid(Reqt, Cpt0, 1) = " " Or Mid(Reqt, Cpt0, 1) = "," Then
            MotGauche = Mid(Reqt, Cpt0 + 1, Posi - Cpt0 - 1): Exit For
        End If
    Next Cpt0
    If MotGauche = "" Then MotGauche = Mid(Reqt, 1, Posi - 1)
    'descend la phrase >--->
    For Cpt0 = Posi + 1 To Len(Reqt)
        If Mid(Reqt, Cpt0, 1) = " " Or Mid(Reqt, Cpt0, 1) = "," Then
            MotDroite = Mid(Reqt, Posi + 1, Cpt0 - Posi - 1): Exit For
        End If
    Next Cpt0
    If MotDroite = "" Then MotDroite = Mid(Reqt, Posi + 1, Len(Reqt) - Posi)
    RecupleMot = MotGauche & Mid(Reqt, Posi, 1) & MotDroite
    Fin = Posi + Len(MotDroite) + 1
    End Function
    Ligne n°5, il faut redimensionner le tableau si l'on veut ajouter un caractère spécial à la ligne n°9.
    L'appel à cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Req = VerifReqt("From ~TMPCLP527031 Order By NumEnrg_Tabl")

  3. #3
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 92
    Points : 54
    Points
    54
    Par défaut
    merci. mais y a toujours un souci.
    je veux valider le mot "l'histoire" contenu dans le champ text1
    j'ai créé une fonction qui permette de mettre le caractère ' en [']:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function CHAINE_DE_CARACTERE(bVal As String) As String
        Dim Pos As Long
     
        If InStr(bVal, "'") = 0 Then
            CHAINE_DE_CARACTERE = bVal
          Else
            Pos = InStr(bVal, "'") 'Pos est la position du caractère ' dans la chaine bVal
            CHAINE_DE_CARACTERE = Mid(bVal, 1, Pos - 1) & "[']" & Mid(bVal, Pos + 1, Len(bVal) - Pos)
        End If
    End Function
    à la validation du champ, j'appelle l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bconnection.execute "INSERT INTO TABLE_DES_MOTS (mot) VALUES ('" & CHAINE_DE_CARACTERE(text1) & "')"
    il me revient toujours une erreur. sans le caractère, il valide aisément.

  4. #4
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 112
    Points : 16 645
    Points
    16 645
    Par défaut
    Pas sûr mais, en doublant le ' cela donne quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function CHAINE_DE_CARACTERE(bVal As String) As String
    If InStr(bVal, "'") = 0 Then
            CHAINE_DE_CARACTERE = bVal
            Else
            CHAINE_DE_CARACTERE = Replace(bVal, "'", "''")
    End If
    End Function

  5. #5
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 92
    Points : 54
    Points
    54
    Par défaut
    merci encore une fois. ça marche parfaitement.

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

Discussions similaires

  1. caractère critique dans une instruction sql
    Par Damien10 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/01/2007, 17h54
  2. [C#] insertion de caractère en exposant dans une string
    Par papouAlain dans le forum Windows Forms
    Réponses: 9
    Dernier message: 11/07/2006, 16h45
  3. pb:inserer des caractère en arabe dans une bd sql server
    Par l_faiza dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/12/2005, 15h02
  4. caractère spéciaux à mettre dans une variable
    Par BernardT dans le forum Langage
    Réponses: 7
    Dernier message: 12/12/2005, 12h24

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