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.NET Discussion :

Problème requete SQL [Débutant]


Sujet :

VB.NET

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 267
    Par défaut Problème requete SQL
    Bonjour,
    j'ai un problème a la modification de la variable QTDISP qui est de type double. Quand je clique sur la bouton pour modifier il s'affiche un message d'erreur. Si par exemple je mets 10,53 il m'affiche
    syntaxe incorrect vers '53'
    et si je mets 10.53 il affiche aussi un message
    conversion invalide de la chaine 10.53 vers double.
    Merci de m'aider svp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            connexion.con.Open() ' ouverture de la connexion vers la base
     
            Dim tx8 As Double = TextBox8.Text
     
     
            Dim cmd3 As New SqlCommand("UPDATE [Base-Ets-Mtiri].[dbo].[ARTICLE] SET QTDISP=" & tx8 & " "WHERE ART='" & tx1 & "'", connexion.con) ' la commande
           cmd3.ExecuteNonQuery()
            connexion.con.Close()
     
        End Sub

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonsoir,

    Rien qu'en regardant les couleurs de la requête on voit que le problème se situe au niveau de la construction de celle-ci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            connexion.con.Open() ' ouverture de la connexion vers la base
     
            Dim tx8 As Double = TextBox8.Text
     
     
            Dim cmd3 As New SqlCommand("UPDATE [Base-Ets-Mtiri].[dbo].[ARTICLE] SET QTDISP=" & tx8 & " "WHERE ART='" & tx1 & "'", connexion.con) ' la commande
           cmd3.ExecuteNonQuery()
            connexion.con.Close()
     
        End Sub
    Il ne faut jamais concaténer les requêtes.
    Si vous ne voulez pas avoir se problème, utilisez les requêtes paramétrées (voir FAQ)...

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Cherche de l'info sur les requêtes paramétrées

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 267
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Cherche de l'info sur les requêtes paramétrées
    Mais j'ai avec ce colonne 10 autre champ et ca marche bien sauf pour le cas ou je tape le type Double ce n'est pas un problème de la forme de la requête.

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Ce n'est pas le type doule qui pose problème mais c'est la concaténation de champ, comme je l'ai marqué, regardez la colorisation automatique et au premier coup d'oeil on voit qu'il y a un problème... (Et par conséquent, on sait même le résoudre)

    Le meilleur moyen d'éviter ce problème (et beaucoup d'autres) est dt'utiliser les requêtes paramétrées.

    Donc regardez de ce coté.

  6. #6
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 267
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Ce n'est pas le type doule qui pose problème mais c'est la concaténation de champ, comme je l'ai marqué, regardez la colorisation automatique et au premier coup d'oeil on voit qu'il y a un problème... (Et par conséquent, on sait même le résoudre)

    Le meilleur moyen d'éviter ce problème (et beaucoup d'autres) est dt'utiliser les requêtes paramétrées.

    Donc regardez de ce coté.
    Mais non la différence de coloration parce que j'ai pas importé tous le code j'ai aucun erreur mon erreur est seulement sur le double j'ai dit que j'ai 10 textbox tous ca fonctionne bien de plus si je met un entier ca passe tres mais mais si je mais le double c'est le problème malgré que la colonne dans la base est de type double.

  7. #7
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Donc le code que vous nous donné est mauvais, donc on cherche dans la mauvaise direction car il y a un guillemet en trop avant "WHERE ART"

    donc ceci : (mauvaise coloration syntaxique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim cmd3 As New SqlCommand("UPDATE [Base-Ets-Mtiri].[dbo].[ARTICLE] SET QTDISP=" & tx8 & " "WHERE ART='" & tx1 & "'", connexion.con) ' la commande
    est cela : (bonne coloration syntaxique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim cmd3 As New SqlCommand("UPDATE [Base-Ets-Mtiri].[dbo].[ARTICLE] SET QTDISP=" & tx8 & "WHERE ART='" & tx1 & "'", connexion.con) ' la commande
    Le problème de conversion ne change rien à la réponse précédente, utilisez cette requête paramétrée et elle se chargera de faire les bonnes conversions, d'éviter les injections SQL, de corriger les string contenant des guillemets en les doublant etc. etc...

    Des que des paramètres proviennent d'autre part que la requête en elle même, il faut prendre le pli d'utiliser ces requêtes paramétrées, question de bon sens.

  8. #8
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 267
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Donc le code que vous nous donné est mauvais, donc on cherche dans la mauvaise direction car il y a un guillemet en trop avant "WHERE ART"

    donc ceci : (mauvaise coloration syntaxique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim cmd3 As New SqlCommand("UPDATE [Base-Ets-Mtiri].[dbo].[ARTICLE] SET QTDISP=" & tx8 & " "WHERE ART='" & tx1 & "'", connexion.con) ' la commande
    est cela : (bonne coloration syntaxique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim cmd3 As New SqlCommand("UPDATE [Base-Ets-Mtiri].[dbo].[ARTICLE] SET QTDISP=" & tx8 & "WHERE ART='" & tx1 & "'", connexion.con) ' la commande
    Le problème de conversion ne change rien à la réponse précédente, utilisez cette requête paramétrée et elle se chargera de faire les bonnes conversions, d'éviter les injections SQL, de corriger les string contenant des guillemets en les doublant etc. etc...

    Des que des paramètres proviennent d'autre part que la requête en elle même, il faut prendre le pli d'utiliser ces requêtes paramétrées, question de bon sens.
    OH LA LA
    J'ai dit que c'est un bout de code c'est pourquoi il y a le probleme dans le couleur mais autre fois mon problème dans le type double du tx8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Dim cmd3 As New SqlCommand("UPDATE [Base-Ets-Mtiri].[dbo].[ARTICLE] SET ART='" & tx1 & "',DESIG='" & tx2 & "',FAMILLE='" & tx3 & "',PVHTGRO=" & tx4 & ",REMIGRO='" & tx5 & "',REMIDET=" & tx6 & ",CTVA=" & tx7 & ", QTDISP=" & tx8 & ",QTINV=" & tx9 & "WHERE ART='" & tx1 & "'", connexion.con)

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par oami89 Voir le message
    OH LA LA
    J'ai dit que c'est un bout de code c'est pourquoi il y a le probleme dans le couleur mais auuuuuuutre fois mon problème dans le type double du tx8
    tu aurais pas fait la boulette, il n'y aura pas eut cette perte de temps, donc tu ne peux t'en prendre qu'à toi

    as tu regardé le résultat de la concaténation avant qu'elle parte au sgbdr ?
    quel est le sgbdr ?
    quel est le paramétrage de windows (paramètres régionaux) et le paramétrage de ton sgbdr concernant le séparateur de décimal ? (et je vais le redire car tu ne sembles pas l'avoir compris, utiliser les dbparameters permet de se soustraire du paramétrage de windows et du sgbdr et donc d'éviter ce genre de bug !)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 267
    Par défaut
    J'ai vous dit que ce n'est pas un problème de requete c'est un problème du float j'ai ajouté ce ligne seulement sans rien changer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tx8 = Replace(tx8, ",", ".")
    et c'est bien marché.

  11. #11
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Et on vous dit que l'on avait compris et que ce n'est pas la bonne méthode.
    Un requête paramétrée l'aurait fait automatiquement mais quand on est têtu...

  12. #12
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par oami89 Voir le message
    J'ai vous dit que ce n'est pas un problème de requete c'est un problème du float j'ai ajouté ce ligne seulement sans rien changer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tx8 = Replace(tx8, ",", ".")
    et c'est bien marché.
    ca a bien marché sur le pc sur lequel tu testes, mais tu trouveras un jour un pc sur lequel ca plantera et seules les requêtes paramétrés font que ca marchera sur tous les pc
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 267
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    ca a bien marché sur le pc sur lequel tu testes, mais tu trouveras un jour un pc sur lequel ca plantera et seules les requêtes paramétrés font que ca marchera sur tous les pc
    Mais je suis débutant c'est mon 1er programme il faut que je le corrige maintenant puis je vais apprendre les requêtes paramétrés que je les connait pas si vous avez un exemple prêt merci de me donné.

  14. #14
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par oami89 Voir le message
    J'ai vous dit que ce n'est pas un problème de requete c'est un problème du float j'ai ajouté ce ligne seulement sans rien changer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tx8 = Replace(tx8, ",", ".")
    et c'est bien marché.
    Et si demain ton programme est utilisé par un anglais, tu fais comment ?

  15. #15
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    @Stringbuilder : merci de rester poli et calme stp.

    @oami89 : tu es débutant ? Les gens qui t'ont répondu ici ne le sont pas. Et s'ils te conseillent d'utiliser les requêtes paramétrées, ce n'est pas par plaisir d'embêter les débutant. C'est parce que c'est une bonne pratique de développement qu'il est impératif que tu maîtrises si tu veux t'éviter de longues sessions de débugage de concaténations de chaînes de caractères et sécuriser ton application.

    Les requêtes paramétrées te permettent de t'affranchir de tout un tas d'erreurs potentielles liées à des apostrophes, guillemets, points, virgules, etc.

    Elles sont qui plus est très simples à utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim cmd3 As New SqlCommand("UPDATE [Base-Ets-Mtiri].[dbo].[ARTICLE] SET QTDISP=@QTDISP WHERE ART=@ART'", connexion.con) ' la commande
    cmd3.Parameters.Add("@QTDISP ", SqlDbType.LeType, LaLongueur).Value = tx1
    cmd3.Parameters.Add("@ART", SqlDbType.LeType, LaLongueur).Value = tx1

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

Discussions similaires

  1. [MySQL] Problème requete SQL dans PHP
    Par dl_jarod dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/04/2006, 15h40
  2. problème requete sql fusion de deux count
    Par TuxP dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/12/2005, 16h15
  3. Problème requete SQL
    Par tonyskn dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/11/2004, 21h37
  4. problème requete sql
    Par Fred- dans le forum ASP
    Réponses: 2
    Dernier message: 13/06/2004, 03h20
  5. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 10h31

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