Caractère ' en VB

MalaBar419 Messages postés 5 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 18 janvier 2005 - 17 mars 2004 à 02:34
Mohammadothmane Messages postés 4 Date d'inscription samedi 30 octobre 2010 Statut Membre Dernière intervention 26 mai 2011 - 27 déc. 2010 à 14:51
salut jai un souci en vb avec la génération de requêtes sql. Voici un exemple de code:

sqlAjout = "INSERT INTO particuliers VALUES(null, ' " + TxtNom.Text + " ' )

Ce qui veut dire que si le contenue de TxtNom est "Pau" on a:

sqlAjout = "INSERT INTO particuliers VALUES(null, 'Paul')"

Le pb c que si la valeur de txtnom comporte un apostrof (ex: "Aujourd'hui") on obtient :
sqlAjout = "INSERT INTO particuliers VALUES(null, 'Aujourd'hui')" , ce qui va générer une erreur dans la syntaxe sql à cause de l'apostrof en tro... :sad) comment y remédier?
merci d'avance

5 réponses

cmusy Messages postés 33 Date d'inscription jeudi 18 avril 2002 Statut Membre Dernière intervention 17 mai 2004
17 mars 2004 à 08:24
Il faut vérifier (InStr devrait convenir) si TxtNom contient un '
Si oui, le doubler, par exemple : "Aujourd'hui" doit devenir "Aujourd''hui"
Je pense que la fonction Replace peut faire ça.

cmusy
0
cmusy Messages postés 33 Date d'inscription jeudi 18 avril 2002 Statut Membre Dernière intervention 17 mai 2004
17 mars 2004 à 08:25
Il faut vérifier (InStr devrait convenir) si TxtNom contient un '
Si oui, le doubler, par exemple : "Aujourd'hui" doit devenir "Aujourd''hui"
Je pense que la fonction Replace peut faire ça.

cmusy
0
jeromepol49 Messages postés 51 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 1 juin 2004
17 mars 2004 à 10:03
J'ai eu ce pb et voila le bout de code pour convertir. En fait, il faut convertir le code asccii 39 en 180 car le caractère apostrophe est utilisé pour délimiter les chaines de caractères sous access.

'* Convertir le caractère apostrophe (') *
'* Dans une BDD le délimiteur pour un champ texte est ' (ASCII=39)=> remplacer par ASCII(180)*

Public Function ConvCaractere(chaine As String) As String
Dim i As Integer
For i = 1 To Len(Trim(chaine))
'Si le caractère est ' on le remplace
If Asc(Mid(chaine, i, 1)) = 39 Then
Mid(chaine, i, 1) = Chr(180)
End IfNext i
ConvCaractere = UCase(chaine)
End Function
0
MalaBar419 Messages postés 5 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 18 janvier 2005
17 mars 2004 à 10:49
Merci bocou
:big)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mohammadothmane Messages postés 4 Date d'inscription samedi 30 octobre 2010 Statut Membre Dernière intervention 26 mai 2011
27 déc. 2010 à 14:51
Merçi Merçi baucoup mon ami jeromepol49 pour l'astuce vraimenet tu es tres dangereaux hhhh par ce que j'ai ce problème et j'ai pas trouvé une solution pour l résoudre mais apres l'exicution de ce code l'envoie des données sa marche bien
et pour moi jai essaye avec 2 textbox et un bouton le bouton contient le code suivant:
Dim chaine, ConvCaractere As String
chaine = TextBox1.Text

Dim i As Integer
For i = 1 To Len(Trim(chaine))
'Si le caractère est ' on le remplace
If Asc(Mid(chaine, i, 1)) = 39 Then
Mid(chaine, i, 1) = Chr(180)
End If
Next i
ConvCaractere = UCase(chaine)
TextBox1.Text = chaine

req = "insert into t1 values('" & TextBox1.Text & "','" & TextBox2.Text & "')"

cn.Close()
cmd = New OleDb.OleDbCommand(req)
cmd.Connection = cn
cn.Open()

cmd.ExecuteNonQuery()
cn.Close()


come ça avant d'envoyer la requete si le textbox1 est contient une apostrophe l'apostrophe (')sera remplacé par (Ž)
0
Rejoignez-nous