Bonjour
Dans ma commande d'insert j'ai une phrase qui contiens un ' du coup j'ai un arrêt il doit surment être possible de l'enregisrtre ?
merci de votre aide
Mario
Version imprimable
Bonjour
Dans ma commande d'insert j'ai une phrase qui contiens un ' du coup j'ai un arrêt il doit surment être possible de l'enregisrtre ?
merci de votre aide
Mario
S.V.P écrire ta requête pour trouver l'erreur.
Pour mettre dans une requête une chaine qui contient un apostrophe, il faut doubler l'apostrophe pour que ce ne soit pas considéré comme la fin de la chaine (mais ça n'en insèrera qu'un seul bien sûr)
Cela dit, ce n'est vraiment pas propre comme solution... Il ne faut pas construire la requête en mettant les données directement dedans, il faut utiliser une requête paramétrée, comme expliqué dans ce tuto :
http://webman.developpez.com/article...rameter/vbnet/
Supposons INSERT INTO TblHistoire(Titre,Extrait) VALUES ('Bonjour','L'été est la')
j'ai un arrêt à cause du L'
Coool Merci Tom
tu peut créer une variable où tu met ton texte.Code:Supposons INSERT INTO TblHistoire(Titre,Extrait) VALUES ('Bonjour','L'été est la')
exemple
Ou bien tu met ton texte dans un Label ou une zone de texteCode:
1
2
3 Dim X as String X = "L'été est la" INSERT INTO TblHistoire(Titre,Extrait) VALUES ('Bonjour', X )
Essai ça, j'espère que ça marche pour toiCode:INSERT INTO TblHistoire(Titre,Extrait) VALUES ('Bonjour', " & Text1.Text & ")
Bonsoir JetLibre,
ta solution ne change strictement rien au problème de Mario Rousson. Ce n'est pas en passant par une variable quelconque que cela va changer le contenu.
Les solutions ont été données par tomlev dans le 3iem message.
deux solutions
Ou bienCode:INSERT INTO TblHistoire(Titre,Extrait) VALUES ('Bonjour','L''été est la')
Code:
1
2
3 Dim X as String X = "L'été est la" INSERT INTO TblHistoire(Titre,Extrait) VALUES ('Bonjour', X.Replace("'", "''") )
On ne le dira jamais assez, adoptez les bonnes pratiques et optez pour plus de sécurité en utilisant les requêtes paramétrées tel qu'indiqué par tomlev et Sankasssss.
voici ce qu'il faut faire :Code:
1
2 Dim X as String X = "L'été est la"
Code:
1
2
3 ObjetCommand.CommandText = " INSERT INTO [Matable] ( Monchamp ) VALUES ( @Monchamp);" ObjetCommand.Parameters.Add("@Monchamp", OleDbType.VarChar).Value =X
Petite précision, si t'es sous SQL Server, c'est bien @ qui doit être utilisé pour spécifier tes paramètres. Mais sous access, @ ne marchera pas. Faut pluôt utiliser ?
merci à tous je vais travailler sur les requêtres paramêtrer c'est la methode la plus sur
j'ai créer une function d'enregistrement voici le code il me manque quelques chose en quelque par ..
Code:
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 Function ExComAjComp(ByVal SQL As String) As Integer Dim SQlS() As String = SQL.Split(";"c) Dim SQLNomC As String = "INSERT INTO TblCompagnie(Nom,Adresse,Ville,ProvEtat,Pays,CodePostal,Telephone,Fax,SiteWeb,Courriel,Secteur,SecteurAct,SCIAN,SIC,Descrip) VALUES ('@nom','@adresse','@ville','@provEtat','@Pays','@codePostal','@telephone','@Fax','@siteWeb','@courriel','@secteur','@secteurAct','@sCIAN','@sIC','@descrip')" Try Me.OuvrirConnexion() Dim Cmd As New OleDbCommand With Cmd.Parameters .Add(New OleDbParameter("@nom", OleDb.OleDbType.BSTR, 255)) .Add(New OleDbParameter("@adresse", OleDb.OleDbType.BSTR, 255)) .Add(New OleDbParameter("@ville", OleDb.OleDbType.BSTR, 50)) .Add(New OleDbParameter("@provEtat", OleDb.OleDbType.BSTR, 50)) .Add(New OleDbParameter("@Pays", OleDb.OleDbType.BSTR, 50)) .Add(New OleDbParameter("@codePostal", OleDb.OleDbType.BSTR, 25)) .Add(New OleDbParameter("@telephone", OleDb.OleDbType.BSTR, 255)) .Add(New OleDbParameter("@Fax", OleDb.OleDbType.BSTR, 255)) .Add(New OleDbParameter("@siteWeb", OleDb.OleDbType.BSTR, 255)) .Add(New OleDbParameter("@courriel", OleDb.OleDbType.BSTR, 255)) .Add(New OleDbParameter("@secteur", OleDb.OleDbType.BSTR, 100)) .Add(New OleDbParameter("@secteurAct", OleDb.OleDbType.BSTR, 100)) .Add(New OleDbParameter("@sCIAN", OleDb.OleDbType.BSTR, 255)) .Add(New OleDbParameter("@sIC", OleDb.OleDbType.BSTR, 255)) .Add(New OleDbParameter("@descrip", OleDb.OleDbType.LongVarChar)) End With With Cmd .Parameters("@nom").Value = SQlS(0) .Parameters("@adresse").Value = SQlS(1) .Parameters("@ville").Value = SQlS(2) .Parameters("@provEtat").Value = SQlS(3) .Parameters("@Pays").Value = SQlS(4) .Parameters("@codePostal").Value = SQlS(5) .Parameters("@telephone").Value = SQlS(6) .Parameters("@Fax").Value = SQlS(7) .Parameters("@siteWeb").Value = SQlS(8) .Parameters("@courriel").Value = SQlS(9) .Parameters("@secteur").Value = SQlS(10) .Parameters("@secteurAct").Value = SQlS(11) .Parameters("@sCIAN").Value = SQlS(12) .Parameters("@sIC").Value = SQlS(13) .Parameters("@descrip").Value = SQlS(14) .Connection = Me._cn .CommandType = CommandType.Text .CommandText = SQLNomC Return Cmd.ExecuteNonQuery End With Catch ex As Exception Throw New ApplicationException("La mise à jour à échoué " & ex.Message) Finally Me.FermerConnection() End Try End Function
Tu dois rajouter la requête à ton oleDbCommand, ainsi qu'un objet Connexion, que fais OuvrirConnexion ? Renvoi-t-elle un objet connection ? Charge-t-elle une property connexion ?
EDIT : Lu trop vite ... :?
Je vois pas ce qu'il manque pour ma part ...
Peut-être inverser ces 2 lignes :Code:
1
2 Return Cmd.ExecuteNonQuery End With
Hello,
Alors je débarque un peu et mon truc c'est plus SQL SERVER que Access mais quand même, les paramètres entre apostrophes, cela me semble bizarre.
A priori, les apostrophes délimitent des chaînes de caractères. Du coup, il prend p-e "@leparam" et tente de le mettre dans la colonne associée...
Bien vu, c'est bien ça le problème à mon avis... En fait il faut voir les paramètres comme des "variables" dans la requête : une variable x qui contient une chaine "toto" en VB, tu ne la mets pas x entre guillemets pour l'utiliser... bah c'est pareil ici : pas d'apostrophes autour des paramètres, sinon ils sont traités comme des chaines qui contiennent le nom du paramètre...
Il faut donc modifier la requête comme ça :
Code:Dim SQLNomC As String = "INSERT INTO TblCompagnie(Nom,Adresse,Ville,ProvEtat,Pays,CodePostal,Telephone,Fax,SiteWeb,Courriel,Secteur,SecteurAct,SCIAN,SIC,Descrip) VALUES (@nom,@adresse,@ville,@provEtat,@Pays,@codePostal,@telephone,@Fax,@siteWeb,@courriel,@secteur,@secteurAct,@sCIAN,@sIC,@descrip)"
merci à tous de vos interventions c'est précieux
Merci TomLev tu es un champion ...comme tout les autre d'ailleurs
j'ai fait un code test et il fonctionne à 100/100
voici le code
merci à tous grace à vous mon code deviens meilleurCode:
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 Function reqtmp() As Integer Dim SQlS() As String = {"LeNom", "l'adresse", "La ville"} Dim SQLNomC As String = "INSERT INTO TblReqPar(Nom,Adresse,Ville) VALUES (@nom,@adresse,@ville)" Try Me.OuvrirConnexion() Dim Cmd As New OleDbCommand With Cmd.Parameters .Add(New OleDbParameter("@nom", OleDb.OleDbType.BSTR, 255)) .Add(New OleDbParameter("@adresse", OleDb.OleDbType.BSTR, 255)) .Add(New OleDbParameter("@ville", OleDb.OleDbType.BSTR, 50)) End With With Cmd .Parameters("@nom").Value = SQlS(0) .Parameters("@adresse").Value = SQlS(1) .Parameters("@ville").Value = SQlS(2) .Connection = Me._cn .CommandType = CommandType.Text .CommandText = SQLNomC End With Return Cmd.ExecuteNonQuery Catch ex As Exception Throw New ApplicationException("La mise à jour à échoué " & ex.Message) Finally Me.FermerConnection() End Try End Function
Mario