Récupération d'une données dans un jTextField en fonction de la sélection dans u

Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008 - 2 juin 2008 à 09:19
 wasy - 10 avril 2013 à 10:52
Bonjour,

comment puis je envoyer le résultat d'une requête dans un jTextField tout en sachant que ce résultat sera dépendant de la sélection qui aura été faite dans une combo box avant.*
En fait j'ai une combo box dans laquelle je récupère une liste de pays, et lorsque je sélectionne FRANCE dans la liste par exemple, je voudrait que paris apparaissent automatiquement dans le champs de texte capitale qui suit.
Les informations se trouve dans une base de données sql server.

Merci d'avance.

JULIEN.
A voir également:

20 réponses

cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
2 juin 2008 à 13:48
désolé pokitos
, j'aurais dû raffraishir

petite correction : itemStateChanged(ItemEvent e)

+1 pour le ActionListner au lieu du ItemListener : le ItemListener nécessite un test du genre :
if(e.getStateChange() == 1) // ItemEvent e
1
cs_pokitos Messages postés 21 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 27 juillet 2008
2 juin 2008 à 13:22
Je pars sur le principe que tu sais faire la requete;

tu recupere ton ResultSet res (pour jdbc);

et tu fais jtextfield.setText(res.getString(1));

Tu implemente ça soit dans un bouton que tu as créé, soit dans un actionlistener du combobox

///
jComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBox.ActionPerformed(evt);
            }
        });

private void xpActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try{
envoie de la requete ;
jtextfield.setText(res.getString(1));
}
catch(Exception e){
}
}
0
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
2 juin 2008 à 13:40
Salut,

voici la réponse en gros titres, et nous pourrons par la suite développer chaque étape :

1. Développer une méthode capitaleFromPays() :

cette méthode :

    a) se connecte à la base.
    b) exécute une requête SELECT  du genre :
          select capitale from pays where nomPays = '" + tonCombo.getSelectedItem().toString() + "'";

    c) récupère le résultat de la requête et ferme tout flux ouvert (ResultSet, Connexion avec la base..).

2. Ajout d'un ItemChangeListener à l'objet JComboBox en question : la méthode itemStateChange(ItemEvent e) initialise l'objet JTextField du résultat obtenu par la méthode capitaleFromPays().

Cordialement..
0
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
2 juin 2008 à 13:50
pour ne pas effectuer l'action deux fois !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008
2 juin 2008 à 15:46
Re à tous les deux,

tout d'abord merci pour votre aide mais je n'y arrive toujours pas voici ce que j'ai créé grâce à vos explications:

package testaccesdonnees;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main extends javax.swing.JFrame {
   
   //déclaration des variables de départ
    static Connection con = null;
    static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    static Statement stm2 = null;
    static ResultSet rs2 = null;
    static Statement stm3 = null;
    static ResultSet rs3 = null;
   
   
    public Main() {
       
        initComponents();
    }

    private void etatConnexionActionPerformed(java.awt.event.ActionEvent evt) {                                             

}                                            

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                        
             
                //fermeture connection
                 if(con !=null)
                {
                    try{
                        con.close();
                        etatConnexion.setText("Système non connecté à SQL Server");
                    }catch(SQLException e){
                        etatConnexion.setText("Problème de déconnexion");
                    }
                }
                this.dispose();
    }                                       

    private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) {

    }

    private void jComboBox2ItemStateChanged(java.awt.event.ItemEvent evt) {
    
       //mise en place requête de récupération de l'adresse liée au site
        try
        {            String SQL3 "SELECT adresse FROM site WHERE intitulex3 '" + jComboBox2.getSelectedItem().toString() + "'";
            stm3 = con.createStatement();
            rs3 = stm3.executeQuery(SQL3);
            jTextField1.setText(rs3.getString("adresse"));
        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
       
    }
   

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                new Main().setVisible(true);
               
                try
                {
                     Class.forName(driver);
                     String connectionUrl = "jdbc:sqlserver:*************;" +
                     "databaseName=ansamble;user=**;password=**;";
                     con = DriverManager.getConnection(connectionUrl);
                     etatConnexion.setText("Système connecté à SQL Server");
                     String SQL2 = "SELECT * FROM site";
                     stm2 = con.createStatement();
                     rs2 = stm2.executeQuery(SQL2);

                     while (rs2.next())
                     {
                        jComboBox2.addItem(rs2.getString("intitulex3"));
                     }
                 }
                 catch (ClassNotFoundException ex) {
                      System.out.println(ex);
                 }       
                 catch (SQLException e) {
                       etatConnexion.setText("Probleme de connection "+ e.toString());
                 }      
          }
        });
    }

Lorsque je fais ceci ou si je place la requête dans l'ActionPerformed à la place du ItemStateChanged sa ne fonctionne pas et sa me renvoi comme erreur :

          com.microsoft.sqlserver.jdbc.SQLServerException: Le jeu de résultat n'a pas de ligne actuelle.

Pourtant ma requête fonctionne dans sqlserver, ma connection à la base fonctionne et ma jComboBox2 récupère bien la liste des valeurs de la requête 2.

Si vous pouvez me dire ce qui ne vas pas svp????

Merci d'avance^^.

Julien.
0
cs_Chatbour Messages postés 764 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 6 septembre 2010 19
2 juin 2008 à 17:47
Salut,

désolé de ne pas pouvoir lire ton code (j'ai pas le temps : entrain de travailler), mais j'ai voulu te dire qu'il faut éviter les static tant que ce n'est pas nécessaire..

autre chose, je te conseille d'encapsuler ta connexion à ta base dans une classe : c'est plus élégant et plus orienté objet..
0
cs_pokitos Messages postés 21 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 27 juillet 2008
2 juin 2008 à 17:56
rajoute avant le while , rs2.beforefirst(); (ou first ou First je me rapelle plus.)
0
cs_pokitos Messages postés 21 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 27 juillet 2008
2 juin 2008 à 17:58
parcontre si tu sais que n'as qu'un resultat, vire le while et tu fais:

rs2.first();
r2.getString("intitulex3");
0
cs_pokitos Messages postés 21 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 27 juillet 2008
2 juin 2008 à 18:04
c'est rs2.beforeFirst();

en fait le probleme vient que dans le while tu demandes le suivant des le debut mais si tu n'as qu'un résultat(une ligne) il ne peux pas entrer dans la boucle.

donc d'ou ma seconde solution, si tu sais que tu n'as qu'une ligne en resultat
tu leve le while et tu fais

rs2.first(); puis getString()

J'espere que c'est plus clair comme ça.
0
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008
2 juin 2008 à 20:07
Re,

ba en fait le while est necessaire car il va chercher l'ensemble des résultat pour construire la liste de la comboBox. Lorsque je lui met beforeFirst il m'envoi une erreur.
En fait le problème ne vient pas de ma requête rs2 puisqu'elle a pour rôle de remplir la comboBox et elle le fait.
Le problème c'est rs3 qui ne me renvoi pas l'adresse associé a lintitulé selectionné dans la comboBox je me demande si mon actionPerformed fonctionne?????
0
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008
2 juin 2008 à 20:26
Est ce que c'est bien dans le  private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) {...}que je dois mettre ma requête
        String SQL3 "SELECT adresse FROM site WHERE intitulex3 '" + jComboBox2.getSelectedItem().toString() + "'";
        stm3 = con.createStatement();
        rs3 = stm3.executeQuery(SQL3);
         jTextField1.setText(rs3.getString("adresse"));

parce que çà fonctionne tant que je n'ai rien sélectionné dans ma liste et lorsque je selectionne un champs dans la liste il me renvoi une erreur en me donnant

        2 juin 2008 20:24:31 testaccesdonnees.Main jComboBox2ActionPerformed
        GRAVE: null
        com.microsoft.sqlserver.jdbc.SQLServerException: Le jeu de résultat n'a pas de ligne actuelle

donc je n'y arrive pas je ne comprend pas arf^^

Merci a tous les deux de m'aider a me dépatouiller.
0
cs_pokitos Messages postés 21 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 27 juillet 2008
2 juin 2008 à 22:42
stm3 = con.createStatement();
 rs3 = stm3.executeQuery(SQL3);

rs3.first();

 jTextField1.setText(rs3.getString("adresse"));

Je me suis trompé c'est sur celui là que tu doit mettre le 'first'.
0
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008
2 juin 2008 à 23:13
je lui passe first avant et maintenant il me renvoi

    2 juin 2008 23:12:12 testaccesdonnees.Main jComboBox2ActionPerformed
    GRAVE: null
    com.microsoft.sqlserver.jdbc.SQLServerException: L'opération demandée n'est pas prise en charge pour les jeux de résultats avant uniquement.

c trop chelou....
0
cs_pokitos Messages postés 21 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 27 juillet 2008
2 juin 2008 à 23:23
Par curiosite tu peux faire un print de ta requete?

Sinon tu ecrit les script avec quoi? editeur basic ou eclipse / netbean
0
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008
3 juin 2008 à 09:02
Re,

je travail sur netbeans avec awt/swing pour la partie graphique

et voila ma requête:
        String SQL3 "SELECT adresse FROM site WHERE intitulex3 '" + jComboBox2.getSelectedItem().toString() + "'";
        stm3 = con.createStatement();
        rs3 = stm3.executeQuery(SQL3);
         jTextField1.setText(rs3.getString("adresse"));

dans cette requête je selectionne adresse à partir de la table site ou intitulex3 correspond à l'item que je selectionne dans ma jComboBox2
Normalement elle devrais me renvoyer l'adresse correspndante à l'intitulé sélectionné.
J'ai essayé avec rs3.First, rs3.beforeFirst et il me renvoi des erreurs. Pourtant comme sa sa à l'air bon donc......
0
cs_pokitos Messages postés 21 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 27 juillet 2008
3 juin 2008 à 10:22
Je voulais dire System.out.println(SQL3);

Pour etre sur que t'envoie la bonne requete.
0
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008
3 juin 2008 à 12:45
Voila ce que j'ai dans mon ActionPerformed jComboBox2:

        try
        {
                      String SQL3 "SELECT adresse FROM site WHERE intitulex3 '" + jComboBox2.getSelectedItem() + "'";
            stm3 = con.createStatement();
            rs3 = stm3.executeQuery(SQL3);
           
            System.out.println(SQL3);

        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

voila ce que m'envoi la requête quand elle s'execute avec le System.out.println():

SELECT adresse FROM site WHERE intitulex3 = 'VILLEFRANCHE SUR CHER RS'

et voila ce quelle me renvoi avec le jTextField1.setText(rs3.getString("adresse"));

3 juin 2008 12:43:14 testaccesdonnees.Main jComboBox2ActionPerformed
GRAVE: null
com.microsoft.sqlserver.jdbc.SQLServerException: Le jeu de résultat n'a pas de ligne actuelle.
        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetHasCurrentRow(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(Unknown Source)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(Unknown Source)

Si tu veux tu me met ton adresse mail et je t'envoi le zip de mon appli pour que tu test si tu as netbeans. C'est comme tu veux je revient a 14Heure

Merci en tous cas de m'aider parceque la je galere.

Julien.
0
cs_pokitos Messages postés 21 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 27 juillet 2008
3 juin 2008 à 13:24
ok envoie moi ton zip.
je suis pas un pro mais comme , je suis en plein dedans depuis 3 mois, j'en ai vu passer des erreurs qui paraissent apres tres stupide.

envoie sur:    serialjp@hotmail.fr
0
Beberto56 Messages postés 119 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 22 décembre 2008
3 juin 2008 à 14:50
Re,

c'est bon je te l'ai envoyé...

Merci.
0
0
Rejoignez-nous