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

Dotnet Discussion :

requete sql avec nombre inconnu de parametres [Non suivi]


Sujet :

Dotnet

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut requete sql avec nombre inconnu de parametres
    bonjour a tous,

    je veux avoir une page web dans laquelle je siasies des requetes sql et quand je clique sur un bouton, mes resultats sont automatiquement affiches dans un tableau sur une autre page.
    pour le requetes simples, le probleme ne se pose pas, je passe le texte de la requete a mon datasource et le tour est joue.
    par contre, pour les requetes qui attendent des parametres, je ne trouve pas comment afficher des prompts pour que le user saisisse les valeurs voulues au lancement de la requete ( exemple : select * from table where champ1=&valeur1 and champ2=&valeur2). je veux que mon programme me genere les champs ou saisir les valeur dynamiquement ( bien sur le user peut siasir une requete quelconque qui peut contenir un nombre quelconque de parametres et ce nombre est pas connu avant que le user ecrive sa requete).

    pouvez vous me venir en aide svp. ça fait quelques jours que je bloque sur ça sans pouvoir avancer.
    je suis pret a aller vers la technologie que vous voulez pour faire ça rapidement pourvue que ce soit du web.
    merci de votre aide.

  2. #2
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Points : 444
    Points
    444
    Par défaut
    Si j'ai bien compris ton pb, tu peux faire ça en C# ou Vb.Net.
    Sur post back tu récupère la chaine saisi, tu récupère le nombre de paramètres voulues, tu génère dynamiquement des zones de textes et tu rend la main au client. Il te reste un pb, comment déterminer le type des données à saisir ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour votre réponse rapide. mais je suis plus que novice en développement en génral et en .net en particulier. Je vous prie alors de me donner plus de détails sur la solution.

    Merci

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    bonjour a tous,

    je n'arrive toujours pas à trouver une solution à mon problème. ça fait plus d'une semaine que j'erre sur le net sans trouver grand chose. J'ai trouvé des trucs parlant de data-binding ou sql-binding mais les variables sont connues à l'avance. il doit quand même y avoir quelqu'un qui a pensé à ça avant moi non??

    j'ai besoin d'aide please.

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    moi j'ai pas compris.

    1- quand tu dis que l'utilisateur saisi la requête, il saisie la requête au format T-SQL ou alors, il précise le nom d'une procédure stockée et toi tu affiches les cases qui correspondent aux paramètres attendus.



    si l'utilisateur saisi un texte du genre
    select * from table where champ1=&valeur1 and champ2=&valeur2
    pourquoi veux-tu afficher des champs alors qu'il peut taper directement les valeurs des paramètres dans la requête??

    bref, c'est pas clair et ca n'a rien à voir avec le databinding ton problème.

    tu veux pas nous donner un exemple de
    1- l'utilisateur arrive sur la page et tape un texte (tu nous donnes le texte PRECIS!)
    2- tu précises qu'est ce que tu veux voir apparaitre
    3- tu nous expliques comment ensuite, tu retraites ces champs pour refrabriquer une requête
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    rebonjour,

    bon, j'essayerai d'être plus clair cette fois-ci. il est vrai que mon message n'est pas un exemple de clarté .

    Voilà :

    à vrai dire, les requetes ne sont pas saisies par l'utilisateur lui même mais elle sont préalablement enregistrées dans une table par un administrateur.
    j'ai dans ma base de données une table qui s'appelle table_requetes dans laquelle j'enregistre toutes les requetes que l'administrateur juge utiles pour les utilisateurs et leur donne des noms (du genre entree_stock_mois).
    quand l'utilisateur arrive sur sa page, il choisit une requete dans une liste déroulante (bien sur la liste ne contient que les noms des requêtes et pas le texte).
    voici un aperçu de la page que je veux utiliser :
    http://cjoint.com/?fecSlyi6y8
    • L’utilisateur sélectionne une requête dans la liste de requêtes (1).
    • Le texte de la requête s’affiche dans la zone de texte. Cette zone n'est pas affichée à l'utilisateur, elle me sert juste lors du debuggage de mon programme. (2).
    • Les requêtes saisies peuvent être paramétrées ou non et le nombre de paramètres n’est pas connu à l’avance (3).
    • L’utilisateur clique sur le bouton exécuter pour envoyer la requête et les résultats s’affichent dans une nouvelle fenêtre. C’est lors de l’exécution que la requête est analysée et que les paramètres doivent être demandés.
    •l'administrateur utilise une autre page pour introduire autant de requêtes qu'il veut et les requêtes peuvent être paramétrées ou pas.

    Voici un exemple de requete enregistrée par l'administrateur et choisie par l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from entree_stock e where e.mois_entree=:mois and e.annee_entree=:annee.
    dans ce cas, je dois générer à l'utilisateur deux champs où il doit introduire les deux paramètres, s'il choisit une autre requête après celle-ci les deux champs doivent disparaître pour laisser place aux paramètres de la nouvelle requête si celle-ci en demande.

    J'espère que cette fois j'ai été assez clair.
    merci de votre aide

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Voici la solution que je te propose :

    Solution 1 :

    1 - Rajoute un champ dans la table des requêtes qui contient le nombre de paramètres. (ce nombre doit être rentré par l'utilisateur)

    2 - Génère un nombre de zone de saisie égale à ce paramètre

    Solution 2(plus compliquée) :

    Si tu ne veux pas demander à l'utilisateur (l'administrateur en l'occurance) de saisir le nombre de paramètres, il ne te reste plus qu'à les identifier. D'après ce que je vois tu est en ORACLE, alors je te propose ceci :

    1 - Spliter ta requête sur les ":"
    2 - Vérifier qu'aprés chaque ":" on est bien un caractère (pour être sûr que ce soit un paramètre et pas une heure comprise dans une date par exemple)

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim tabParameters As String() = Me.textBoxRequete.Text.Split(":")
     
    'Nombre de paramètres contenus dans la requête
    Dim intParameters As Integer = 0
    For i As Integer = 0 To tabParameters.Length - 1
                If Not IsNumeric(tabParameters(i).Substring(0, 1)) Then
                    intParameters += 1
                End If
    Next

    Ce n'est pas infaillible car rien n'empêche un paramètre de s'appeler :1 par exemple, la meilleur solution reste donc la première. Mais si tu ne peux pas, il va falloir expliquer aux administrateurs qui saisissent les requêtes de bien saisir des paramètres alpha et non numériques

    En espérant avoir aidé...
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  8. #8
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    bah c'est à toi de parser la requête, avec une regex par exemple, et rajouter une textbox pour chaque regex.

    le truc que tu ne peux pas faire, c'est deviner le type de valeur attendue. si tu mets une chaine au lieu d'un chiffre, ca va péter.
    donc à moins que connaitre par coeur tous les champs de la base à l'avance, il n'y a pas de solution à ton problème
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    bonjour à tous,

    je vous remercie pour vos réponses. Pour l'instant j'ai décidé d'abandonner l'idée de jouer avec les requetes paramètrées. je vais créer mes états manuellement. Je reviendrai sur cette idée quand j'aurai un peu plus de maitrise du langage.

    saluations,

  10. #10
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Certains providers de source de données proposent une méthode DeriveParameters.

    Par exemple, sous SQLServer : http://msdn.microsoft.com/fr-fr/libr...arameters.aspx

    Donc tu crées une commande, tu lui files la requête, tu appelles cette méthode, et normalement la collection de paramètres de la commande sera peuplée avec des IDbParameters qui auront le bon nom et le bon type.
    Et si t'as une exception, c'est que l'utilisateur s'est gouré

    Pour Oracle, ODP.Net, dans ses versions les plus récentes, propose aussi une méthode du même nom.

    [edit] Argh, en lisant mieux la doc, il est indiqué que ça ne fonctionne qu'avec les proc stock...
    Mais ça doit être faisable ! Toad le propose, par exemple.
    ಠ_ಠ

  11. #11
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    bonjour à tous,

    je vous remercie tous pour vos réponses et bien que je n'ai toujours pas résolu mon problème, je vais mettre résolu car j'abandonne pour l'instant. et si quelqu'un à quelque chose à me proposer, voici mon mail
    fourre.tout82@gmail.com
    si jamais je trouve une solution, je la mettrai sur ce même post.
    a+

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

Discussions similaires

  1. Tabledatasource et requete sql avec parametres
    Par aidonsnous dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/12/2013, 09h29
  2. [MySQL] Requete SQL avec tableau en parametre
    Par ne2sbeal dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/02/2010, 11h17
  3. requete SQL avec parametre de la méthode
    Par flora806 dans le forum JDBC
    Réponses: 6
    Dernier message: 11/06/2009, 16h59
  4. requete SQL avec des Parametres
    Par devlopassion dans le forum C++Builder
    Réponses: 7
    Dernier message: 18/11/2006, 11h52
  5. [VBA]Requete SQL avec parametre numérique
    Par Pitou5464 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 06/09/2006, 10h33

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