Valeur d'une textbox et requete sql

Résolu
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015 - 15 juin 2009 à 20:04
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015 - 16 juin 2009 à 17:14
salut a tous

j'aimerai obtenir un peu d'aide! Voila mon problème : j'aimerai construire un datagridview lors d'un chargement de ma form . J'y suis arrivé, en utilisant toutes les objets comme le dataset, le dataadapter, le datarow ...

Cependant, je définit dans une requete sql la table et informations qui devront être affichées.Ma requête sql passe bien. Je me suis rendu compte toutefois qu'en plus de la requete que j'avais déjà, il me fallait rajouter une condtion, et tester un autre champs de ma base de données.

La valeur de ce champs est stockée dans une textbox.

Malheureusement, ma requete sql etant définit lors de la déclaration de mes objets, j'ai le nom de la textbox qui n'est pas définit, et donc qui est souligné. De plus j'ai un message me disant que je ne peux mettre de caractère du type "+" dans ma requete.

Comment faire pour récupérer la valeur de ma textbox pour tester ma requête svp ? Est-ce possible de l'utiliser dans la déclaration de mon formulaire et pas dans une méthode de ce formulaire ?

4 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
16 juin 2009 à 15:43
Remarques à propos de ta requête :
Dans la 2ème, tu as 2 "WHERE". Pour le 2ème, tu dois le remplacer par un "AND"
Cependant, les jointures de tables telles que tu les fais sont très lentes et prennent des tonnes de ressources, utilise INNER JOIN :
SELECT
mission.num_ordre,mission.origine,mission.objet,mission.adresse_lieu
FROM mission,agent,realiser where
agent.identifiant=realiser.identifiant and
realiser.num_ordre=mission.num_ordre where agent.identifiant='"+txtboxagent.text+"' "

>"SELECT mission.num_ordre, mission.origine, mission.objet, mission.adresse_lieu FROM mission INNER JOIN realiser ON mission.num_ordre realiser.num_ordre INNER JOIN agent ON realiser.identifiant agent.identifiant WHERE agent.identifiant '" + txtboxagent.Text + "'";
(Sinon, il va s'amuser à traiter le produit du nombre de lignes de chaque table, ce qui devient vite énorme)
Attention également que si agent.identifiant est censé être un nombre, il ne faut pas entourer txtboxagent.Text de '

Ensuite, en ce qui concerne la déclaration de ta requête, il ne faut pas confondre déclaration et initialisation.

public partial class demand_frais : Form
{
    private string maRequete; // Déclaration

    public demand_frais()
    {
        InitializeComponent();
        maRequete = "SELECT ..."; // Initialisation
    }
}

Tu peux faire ton initialisation n'importe quand (tant que c'est avant l'utilisation et après InitializeComponent()), aussi bien dans le constructeur de ta form (comme dans l'exemple) que lors d'un clic sur un bouton, dans une méthode X ou Y...

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
16 juin 2009 à 10:20
Salut

En ce qui concerne le "+", on pourra être plus précis si on voit ta requête, mais globalement, ça veut dire que tu as oublié de fermer les guillemets avant : "SELECT * FROM Table WHERE monChamp = " + maValeur;
Tu peux aussi faire une requête paramétrée, ce sera plus simple :

Quant à ta valeur qui doit se trouver dans une textbox, théoriquement la valeur est mise dans le InitializeComponent(); (si tu as créé ta textbox en mode Design) que tu dois faire avant d'utiliser ton SqlDataAdapteur, DataSet... Donc normalement, tu ne devrais pas rencontrer de problème si tu fais ta requête au bon endroit.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
16 juin 2009 à 15:05
merci pour ta réponse

ma requete est la suivante :



string




SqlGrid = "SELECT mission.num_ordre,mission.origine,mission.objet,mission.adresse_lieu FROM mission,agent,realiser where agent.identifiant=realiser.identifiant and realiser.num_ordre=mission.num_ordre ";



Mai en fait, ma requête devrait plus être celle ci pour m'afficher correctement mon datagrid :
SELECT mission.num_ordre,mission.origine,mission.objet,mission.adresse_lieu FROM mission,agent,realiser where agent.identifiant=realiser.identifiant and realiser.num_ordre=mission.num_ordre where agent.identifiant='"+txtboxagent.text+"' "
;

C'est la dernière condtion que je veux rajouter. Le problème, c'est que j'ai un message d'erreur quand au "+txtboxagent.text+" utilisé. Il s'agit de la textbox que je veux utiliser pour récupérer l'identifiant d'un utilisateur.

Cette requête je la déclare juste après mon :
publicpartialclassdemand_frais :

Form
{
//ici je déclare ma requête sqlGrid
}

Si je le fais ici c'est parce qu'il me faut le faire là sinon quand j'essai de déclarer mon dataadapter pour mon datagrid, il ne reconnait pas sqlGrid . Voici comment je déclare mon dataadapter :
SqlDataAdapter Dtb = newSqlDataAdapter(this.SqlGrid, myConnection);

Je signale que j'ai bien vérifié que la variable utilisé (sqlGrid) est ecrit correctement ( de la même façon ) partout dans mon code
0
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
16 juin 2009 à 17:14
merci pour ta réponse

effectivement je n'ai pas remaqué que j'avais mis deux clause where. C'est juste parce que j'ai retapé le code à la main au lieu de le coller, mais dans mon code il n'y a qu'une seule clause, sinon celà m'etonnerai fort que sa passe.

Pour les INNER JOIN tu as raison, je vais m'efforcer de m'y mettre! C'est une mauvaise habitude que j'ai pris .

pour mon souci, j'ai décidé de faire une initialisation. Du coup sa passe niquel. J'ai juste du retirer mes "this" sinon j'avais toujours le même problème.

Si sa peut aider quelqu'un, le code rectifié est le suivant :
la requête  :


SELECT mission.num_ordre, mission.origine, mission.objet, mission.adresse_lieu FROM mission INNER JOIN realiser ON mission.num_ordre realiser.num_ordre INNER JOIN agent ON realiser.identifiant agent.identifiant WHERE agent.identifiant = '" + txtboxagent.Text + "'";


Cette requete, je la met directement dans ma fonction, et puis quand je déclare mon dataadapter, je le fais de la façon suivante :
SqlDataAdapter Dtb = newSqlDataAdapter();
Dtb.SelectCommand=newSqlCommand(SqlGrid, myConnection);

  Et la, sa passe !!! 
0
Rejoignez-nous