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 :

Requete sur un texte contenant un tiret


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 601
    Points : 206
    Points
    206
    Par défaut Requete sur un texte contenant un tiret
    Bonjour forum

    je bloque sur une requête comme mentionnée dans le titre de la discussion.
    Je souhaiterais obtenir la liste des postes de direction vacant pour l'année scolaire mentionnée dans la photo ci-dessous. voici donc mon script:
    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
     
    Sub AlimenterDGV()
     
         Conn.Open()
         'Requete = "Select Ecoles,Postes_Vacants From Table_Postes_vacants"
         Requete = "Select Service,NbreClasse From " & CraieEnMain & " Where Type_Fonction='DIRECTEUR' And Annee_Depart='" & AnneeScolaire & "'"
         Dim Da As New OleDbDataAdapter(Requete, Conn)
         Dim Dt As New DataTable
         Da.Fill(Dt)
         DGV_Poste.DataSource = Dt
         For k As Integer = 0 To Dt.Rows.Count - 1
             Dim Somme As Integer = Dt.Rows(k).Item(1) + Somme
             L_Poste.Text = "Postes vacants " & Somme
         Next
         Conn.Close()
     End Sub
    Nom : anneescolaire.jpg
Affichages : 81
Taille : 24,3 KoNom : postevacants.jpg
Affichages : 77
Taille : 43,8 Ko

    la variable AnneeScolaire prend le même texte qui se trouve dans la zone de recherche. En principe, le résultat devrait être effectif dans la Datagridview mais nous constatons que la zone reste vide.
    j'ai essayé de tripler les quotes mais j'ai obtenu le même résultat.

    Une aide svp...

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 692
    Points : 5 291
    Points
    5 291
    Par défaut
    La réponse à ton problème tient en deux mots : "Requête paramétrée".

    Cela t'éviteras également d'être facilement vulnérable à la moindre petite injection SQL.
    Une petite recherche Google avec ces deux mots clés te fournira toutes les infos dont tu as besoin.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 155
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 155
    Points : 1 679
    Points
    1 679
    Par défaut
    tu es sûr qu'il y a le type_fonction "directeur" sur cette année là ?
    tu as testé la requête directement ? (sans passer par une variable)
    le nom de ta table est bonne ? (vu qu'elle est aussi dans une variable)
    pas d'espaces parasites avant ou après?

    Edit: +1 pour la requête paramétrée

  4. #4
    Membre actif
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 601
    Points : 206
    Points
    206
    Par défaut
    tu es sûr qu'il y a le type_fonction "directeur" sur cette année là ?
    tu as testé la requête directement ? (sans passer par une variable)
    le nom de ta table est bonne ? (vu qu'elle est aussi dans une variable)
    pas d'espaces parasites avant ou après?
    merci pour la réponse. Effectivement j'ai tout testé. Quand je recopie l'année scolaire en dur dans la requête le résultat est probant comme sur les images.
    l'autre hic, est que nous trouvons 5 occurrences dans la datagridview or dans la base de donnée sur la photo à gauche, nous avons 6 occurrences.
    Nom : Annotation 2024-05-14 160219.jpg
Affichages : 57
Taille : 30,1 KoNom : Annotation 2024-05-14 160307.jpg
Affichages : 56
Taille : 56,0 Ko

    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
     
    Sub AlimenterDGV()
     
          Conn.Open()
      'Requete = "Select Ecoles,Postes_Vacants From Table_Postes_vacants"
      Requete = "Select Service,NbreClasse From " & CraieEnMain & " Where Type_Fonction='DIRECTEUR' And Annee_Depart='2023 - 2024'"
      Dim Da As New OleDbDataAdapter(Requete, Conn)
      Dim Dt As New DataTable
      Da.Fill(Dt)
      DGV_Poste.DataSource = Dt
      For k As Integer = 0 To Dt.Rows.Count - 1
          Dim Somme As Integer = Dt.Rows(k).Item(1) + Somme
          L_Poste.Text = "Postes vacants " & Somme
      Next
      Conn.Close()
     End Sub

  5. #5
    Membre actif
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 601
    Points : 206
    Points
    206
    Par défaut
    Citation Envoyé par popo Voir le message
    La réponse à ton problème tient en deux mots : "Requête paramétrée".

    Cela t'éviteras également d'être facilement vulnérable à la moindre petite injection SQL.
    Une petite recherche Google avec ces deux mots clés te fournira toutes les infos dont tu as besoin.
    j'ai fait la recherche sur la requête paramétrée et je constate que je le faisais sans connaitre le nom de cette requête.

  6. #6
    Membre actif
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 601
    Points : 206
    Points
    206
    Par défaut
    Un grand merci à vous...
    Après plusieurs tests, j'ai constaté que le Sub qui contenait la variable anneescolaire était après le sub de chargement de la datagridview. Ce qui entraînait un string vide lors du load du formulaire. Néanmoins, il faut ajouter un triple quote pour cadrer la variable anneescolaire dans la requête sinon une erreur sera Levée.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 693
    Points : 1 001
    Points
    1 001
    Par défaut
    Citation Envoyé par Mr l'Ashanti Voir le message
    j'ai fait la recherche sur la requête paramétrée et je constate que je le faisais sans connaitre le nom de cette requête.
    Bonjour,

    Non ce n'est pas une requête paramétrée, puisque tu colles les valeurs directement dans l'instruction.

    Les paramètres sont indiquées par des ?
    Ensuite on défini les paramètres, leurs noms, leurs types et leurs valeurs.
    Et enfin, on associe les paramètres à la requête.
    Si tu avais fait çà, tu n'aurais pas eu à te préoccuper des apostrophes, guillemets et autres signes.

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 692
    Points : 5 291
    Points
    5 291
    Par défaut
    Citation Envoyé par Mr l'Ashanti Voir le message
    j'ai fait la recherche sur la requête paramétrée et je constate que je le faisais sans connaitre le nom de cette requête.
    Les termes utilisés dans cette phrase laissent penser qu'au contraire tu n'a pas compris.

    Citation Envoyé par Mr l'Ashanti Voir le message
    Néanmoins, il faut ajouter un triple quote pour cadrer la variable anneescolaire dans la requête sinon une erreur sera Levée.
    Cette phrase confirme que tu n'a pas compris ce qu'est une requête paramétrée.
    Toi tu as fait une requête concaténée

    Une requête paramétrée est une requête dans laquelle tu remplace la valeur en dur (où celle que toi tu as concaténé) par un paramètre.
    La valeur de ce paramètre est affecté via la collection command.Parameters.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    Select MaColonne from ma table where AutreColonne = @Valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    command.Parameters.Add(New SqlParameter("@Valeur", SqlDbType.VarChar, 10))
    command.Parameters("@Valeur").Value = AnneeScolaire
    Un exemple ici :
    https://dotnet.developpez.com/faq/as...onet_reqparams

  9. #9
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 433
    Points : 2 193
    Points
    2 193
    Par défaut
    Bonjour,
    Si je me fi au premier poste il semblerait qu'il s'agit d'une base de données Access et le dernier poste de popo ii s'agit d'une requêtes paramètré SQL serveur.

    Mr l'Ashanti pourrais tu apporter cette précision ?

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 155
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 155
    Points : 1 679
    Points
    1 679
    Par défaut
    Le principe reste le même, en remplaçant les objets SQL en objets OleDb équivalent et mettant des points d'interrogation dans la requête au lieu d'un nom (il faut juste ajouter les différents paramètres dans l'ordre de lecture de la requête)

  11. #11
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 433
    Points : 2 193
    Points
    2 193
    Par défaut
    Oui pour ceux qui connaissent et qui n'ont pas besoin de poser des questions sur ce forum !

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 155
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 155
    Points : 1 679
    Points
    1 679
    Par défaut
    c'est pas faux

  13. #13
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 692
    Points : 5 291
    Points
    5 291
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Oui pour ceux qui connaissent et qui n'ont pas besoin de poser des questions sur ce forum !
    Non, c'est un simple question de bon sens.
    On ne prend pas un code trouvé sur le net sans l'adapter à sa propre situation.
    La lien que j'ai fourni vers la page de la FAQ précise bien qu'il s'agit d'un exemple fonctionnant pour SQL Server.
    A un moment, il faut arrêter d'attendre qu'on nous donne la solution toute prête sans rien faire et commencer à réfléchir par soi même.

  14. #14
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 433
    Points : 2 193
    Points
    2 193
    Par défaut
    Citation Envoyé par popo Voir le message
    Non, c'est un simple question de bon sens.
    On ne prend pas un code trouvé sur le net sans l'adapter à sa propre situation.
    La lien que j'ai fourni vers la page de la FAQ précise bien qu'il s'agit d'un exemple fonctionnant pour SQL Server.
    A un moment, il faut arrêter d'attendre qu'on nous donne la solution toute prête sans rien faire et commencer à réfléchir par soi même.
    Bonjour,
    Je ne suis pas d'accord,tu ne dois pas induire en erreur le demandeur.

  15. #15
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 692
    Points : 5 291
    Points
    5 291
    Par défaut
    Tout dépend de la définition que tu mets derrière "induire en erreur le demandeur".
    Il est très clairement indiqué dans l'exemple qu'il fonctionne avec SQL Server.
    Pour moi, ça signifie très clairement qu'il faut l'adapter à Access.

    Après il y clairement deux écoles :
    Toi tu préfères lui donner directement la solution
    Moi, je préfère lui donner des piste de réflexion et l'amener à se poser les bonnes questions.

  16. #16
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 433
    Points : 2 193
    Points
    2 193
    Par défaut
    Il est vrai que je propose des routines utilisable directement ainsi que le mode d'emploi que l'utilisateur peut adapter à son besoin.

    On peut apprendre la guitare après avoir passé 4 années de solfège ou utiliser des tablature.

    Je favorise l'apprentissage par le code.

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

Discussions similaires

  1. Requete sur un champ contenant plusieurs valeurs
    Par ecarbill dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/01/2011, 14h06
  2. Réponses: 2
    Dernier message: 03/09/2010, 16h17
  3. Requete sur plusieurs tables contenant les mêmes champs
    Par Louison dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/04/2007, 20h41
  4. Réponses: 11
    Dernier message: 17/05/2006, 10h48
  5. Réponses: 2
    Dernier message: 19/10/2005, 10h34

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