Valeur d'une textbox et requete sql [Résolu]

Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- - Dernière réponse : djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
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 ?
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
3
Merci
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 ! -

Merci krimog 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de krimog
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
0
Merci
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 ! -
Commenter la réponse de krimog
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
0
Merci
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
Commenter la réponse de djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
0
Merci
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 !!! 
Commenter la réponse de djbabou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.