Récupération d'une données dans un jTextField en fonction de la sélection dans u
Beberto56
Messages postés119Date d'inscriptionmardi 8 avril 2008StatutMembreDernière intervention22 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.
cs_Chatbour
Messages postés764Date d'inscriptionjeudi 27 juillet 2006StatutMembreDernière intervention 6 septembre 201018 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().
//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);
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.
cs_Chatbour
Messages postés764Date d'inscriptionjeudi 27 juillet 2006StatutMembreDernière intervention 6 septembre 201018 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..
cs_pokitos
Messages postés21Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention27 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
Beberto56
Messages postés119Date d'inscriptionmardi 8 avril 2008StatutMembreDernière intervention22 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?????
Beberto56
Messages postés119Date d'inscriptionmardi 8 avril 2008StatutMembreDernière intervention22 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.
Beberto56
Messages postés119Date d'inscriptionmardi 8 avril 2008StatutMembreDernière intervention22 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.
Beberto56
Messages postés119Date d'inscriptionmardi 8 avril 2008StatutMembreDernière intervention22 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......
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.
cs_pokitos
Messages postés21Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention27 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.