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 :

Aide pour améliorer le code d'une requête MySQL "paramétrée"


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut Aide pour améliorer le code d'une requête MySQL "paramétrée"
    Bonjour,

    Je développe une application avec un formulaire permettant d'afficher dans un datagrid les entrées d'une table MySql. Ce formulaire propose plusieurs champs saisissable, correspondant aux colonnes de ma table, qui jouent ainsi le rôle de filtre.
    Par exemple, j'ai une table Clients qui contient les colonnes "Nom", "Ville", "Age". J'ai donc un formulaire avec trois textbox: Nom, Ville et Age.
    Lors du load du form, j'affiche l'intégralité de ma table. Jusque là, tout va bien. Je fais SELECT Nom,Ville,Age from T_CLIENTS, un datatable pour po et zou.

    En revanche, comment procéder pour coder "proprement" le filtre. En effet, je voudrais utiliser les paramètres (MySqlParameter) mais je suis face à deux problèmes:
    - un paramètre peut être valorisé ou non : du coup, impossible pour moi de définir en amont la requête SELECT Nom, Ville Age From T_CLIENTS WHERE Nom=@Nom OR Ville =@Ville OR Age=@Age étant donné que si le champ est vide, la requête ne renverra pas le résultat escompté.
    - un paramètre peut contenir plusieurs valeurs. Par exemple, le champ "Nom" peut contenir la valeur "Dupont;Durand", la requête correspondante serait Select Nom,Ville,Age From T_CLIENTS Where Nom In ("Dupont","Durand) mais si le champ contient la valeur "Dupont", la requête serait Select Nom,Ville,Age From T_CLIENTS Where Nom = "Dupont" (je me rends compte à l'écriture de ce message que je pourrais faire un IN ("DUPONT"))

    Je peux (et sais comment) m'en sortir mais avec beaucoup de code et en construisant la requête au fur à mesure de la lecture des champs mais je fais appel à vous pour savoir s'il existe une façon plus "propre" de coder cela.

    D'avance merci.

  2. #2
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 32
    Par défaut
    Tu peux faire des if ou select case comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if Nom <> "" then
       if ville <> "" then
         if age <> "" then
             requette1 (avec 03 param)
         else
             requette2 (avec nom et ville)
         endif
       else
            requette3 (nom et age)
       endif
    else
    msgbox ("saisie le nom")
    endif

  3. #3
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    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 574
    Par défaut
    bonjour,
    il y a du code à completer mais l’idée est là!
    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
    Dim Sql As String = "SELECT Nom, Ville Age From T_CLIENTS "
            Dim P(3) As OleDbParameter = Nothing
            Dim Nom() As String = {"toto"}, Ville As String = "Paris", Age As Integer = 26
            Dim StrWhere As String = ""
     
     
            If Nom.Count = 1 Then
                P(0) = New OleDbParameter
                StrWhere = "WHERE Nom=@Nom"
                P(0).OleDbType = OleDbType.Char
                P(0).ParameterName = "@Nom"
                P(0).Size =50
                P(0).Value = Nom(0)
            Else
                StrWhere = "WHERE Nom In("
                For n As Integer = 0 To Nom.Count - 1
                    If n > 0 Then StrWhere += ","
                    StrWhere += " '" + Nom(n) + "'"
                Next
                StrWhere += ")"
            End If
            If Ville.Trim <> "" Then
                P(1) = New OleDbParameter
                If StrWhere.Trim = "" Then
                    StrWhere = "WHERE Ville=@Ville"
                Else
                    StrWhere += " OR Ville=@Ville"
                End If
            End If
            If Age.ToString.Trim <> "" Then
                P(2) = New OleDbParameter
                If StrWhere.Trim = "" Then
                    StrWhere = "WHERE Age=@Age"
                Else
                    StrWhere += " OR Age=@Age"
                End If
            End If
            Dim Cm As New OleDbCommand
            For Each Prm As OleDbParameter In P
                If Prm IsNot Nothing Then Cm.Parameters.Add(Prm)
            Next

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    Merci à vous deux. J'ai opté pour la première proposition mais je vais voir comment adapter la deuxième qui est programmatiquement plus élégante.

    Très bonne journée et bon week-end.

Discussions similaires

  1. Besoin d'aide pour améliorer un code zoom sur image
    Par ROMAIN4 dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 01/12/2016, 10h49
  2. [XL-2007] Besoin d'aide pour améliorer mon code copier-coller
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/07/2014, 16h14
  3. Aide pour faire les jointures sur une requête
    Par calitom dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/06/2010, 18h33
  4. [AJAX] Aide pour amélioration de code dans le cas où javascript pas accepter
    Par lemirandais dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 24/11/2008, 18h47
  5. cherche aide pour améliorer le traitement d'une requête
    Par nomade333 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/04/2008, 14h15

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