Recuperer les donnees de la cellule editee apres avoir change le contenu

kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 - 2 mars 2004 à 19:32
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 - 5 mars 2004 à 10:57
Salut!
J'ai cree un tableau qui est rempli a partir d'une requete.
J'aimerai pouvoir mettre a jour ma BDD quand je change le contenu d'une cellule apres l'avoir edite.
Le model de ma JTable est DefaultTableModel df = new DefaultTableModel(); . J'ai laissee isCellEditable a 'true' ce qui me permet d'editer mes cellules et de changer le contenu mais je ne sais pas comment recuperer les nouvelles donnees.
Si kelk'un a une solution a mon pb qu'il me fasse signe!
kobee12
:big)

8 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
3 mars 2004 à 09:50
Salut,

vu que tu utilises DefaultTableModel, tu peux redéfinir setValueAt(). Quand tu changes une valeur tu appelles cette méthode et tu peux la stocker dans une structure de données et tu auras ainsi les nouvelles valeurs.
Ou tu peux créer un listener sur l'évènement tableChanged pour prendre en compte la nouvelle valeur mais sans être obligé de redéfinir setValueAt().
0
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 1
3 mars 2004 à 18:28
J'ai fait comme ca :
df.addTableModelListener(new javax.swing.event.TableModelListener() {
public void tableChanged(javax.swing.event.TableModelEvent e){
if(ligneSelect!= -1 && colonneSelect!=-1)
modifCell(ligneSelect, colonneSelect);
}
});

J'ai mis un if sinon il utilise tableChanged a l'ouverture de ma fenetre et donc ma fonction pour faire un update, ce qui ne va pas.
Sinon ma fonction modifCell est comme ca :
void modifCell(int ligne, int colonne)
{
String valCell = JTable1.getValueAt(ligne,colonne).toString();
String requete = "INSERT INTO T_Repertoire ("+colNames[colonne]+") VALUES ('"+valCell+"');";
System.out.println(requete);
System.out.println("tableChanged : " + ligne + ":" + colonne);
System.out.println("valCell :" +valCell+", "+colNames[colonne]);
dataBase.connect("Repertoire","","","Access");
int result = dataBase.update(requete);
dataBase.disconnect();
}

Ca devrait mais ca ne veut pas il me fait une erreur a la ligne en gras. Ca provient de la fonction update qui est definit comme ca :
// Méthode qui renvoit le nombre d'enregistrements affectés
// par une requete de type INSERT, DELETE, UPDATE
// @args -> la requete
public int update(String query)
{
int r = 0;
try
{
r = stmt.executeUpdate(query);
}
catch (SQLException e)
{
JOptionPane.showMessageDialog(null,"Erreur de connexion à la base. update(String query). Veuillez contacter votre administrateur système","Connexion",JOptionPane.WARNING_MESSAGE);
System.out.println("5");
}
return r;
}

il n'arrive pas a me faire r = stmt.executeUpdate(query);
Ca provient peut etre de ma requete.
Celle ci m'affiche :
INSERT INTO T_Repertoire (Adresse) VALUES ('ds');
Si tu as une idee pourrais tu m'en faire part
Merci
:big)
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
3 mars 2004 à 18:56
à première vue, je voie rien de bizarre. Je suppose que la méthode connect crée le statement ? C'est quoi le message d'erreur ?
T'es pas obligé de mettre le ';' à la fin de ta requête, JDBC le fera pour toi.
0
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 1
3 mars 2004 à 21:07
En fait j'ai mis un insert au lieu d'un update.
Ca marche pas encore mais c'est deja ca de regler
voici ma fonction :

void modifCell(int ligne, int colonne)
{
DbManager dataUpdate = new DbManager();
String valCell = JTable1.getValueAt(ligne,colonne).toString();
String Nom = donnees[ligne][0].toString();
String Prenom = donnees[ligne][1].toString(); String requete "UPDATE T_Repertoire SET T_Repertoire."+colNames[colonne]+" ""+valCell+"" WHERE T_Repertoire.Nom = ""+Nom+"" AND T_Repertoire.Prenom = ""+Prenom+"";";
System.out.println(requete);
dataUpdate.connect("Repertoire","","","Access");
int result = dataBase.update(requete);
dataUpdate.disconnect();
}
mon pb c'est que l'update ne fonctionne toujours pas. J'ai remarque egalement quand je met en commentaire
int result = dataBase.update(requete);
le disconnect me fait une erreur alors que je l'utilise plus haut dans mon prog et il ne me fait pas d'erreur!!
Ca commencve a me prendre le chou!!
J'aimerai qu'on trouve une solution a ce pb!!
:big)
0

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

Posez votre question
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
3 mars 2004 à 22:36
quand tu dis que l'update ne fonctionne pas il se passe quoi (message d'erreur ...) ?
C'est quoi l'objet 'dataBase' ? Tu utilises l'objet 'dataUpdate' puis d'un seul coup 'dataBase'.
0
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 1
4 mars 2004 à 15:54
Je me suis trompe quand j'ai ecrit le message , c'est pas dataBase mais dataUpdate.

Il m'affiche ce qu'il y a dans le 'catch(SQLException e)' quand j'ai une erreur pour update. Tu as la fonction dans un message plus haut.
quand j'affiche l'exception e j'obtiens :
"java.sql.SQLException: [Microsoft][Pilote ODBC Microsoft Access] Trop peu de paramètres. 3 attendu."
J'ai teste mon update sous access et il marche bien.

Quand je met en commentaire la ligne int result = dataUpdate.update(requete); il me sort comme erreur pour disconnect :
Exception occurred during event dispatching:
java.lang.NullPointerException

Voila les erreurs.
:big)
0
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 1
5 mars 2004 à 10:53
Ca y est j'ai trouve pourquoi j'avais des erreurs!
Le pb pour mon update c'est que je mettais des " " au lieu de mettre des ' '.
Pour mon disconnect, j'essayais de fermer mon Resulset en mettant rs.close(); alors que celui ci etait null.
J'ai donc mis un petit if pour eviter cela. Je pense que c'est correct de mettre comme ca.
Ma fonction disconnect ressemble a ca maintenant :
public void disconnect()
{
try
{
if(rs!=null)
rs.close();
stmt.close();
conn.close();
System.out.println("déconnexion ok!");
}
catch ( SQLException E)
{
System.out.println(E);
JOptionPane.showMessageDialog(null,"Erreur de connexion à la base. disconnect(). Veuillez contacter votre administrateur système","Connexion",JOptionPane.WARNING_MESSAGE);
}
}
:big)
0
kobee12 Messages postés 153 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006 1
5 mars 2004 à 10:57
ca y est j'ai trouve mes erreurs.
Pour ma requete j'ai remplace les guillemets par des quotes et ca marche.
Pour mon disconnect, j'essayais de fermer mon ResulSet qui etait null, d'ou l'erreur NullPointerException. J'ai rajoute un if pour eviter de lefermer quand il est null, je pense que c'est correct de farire comme ca.
Ma fonction disconnect ressemble a ca maintenant:
public void disconnect()
{
try
{
if(rs!=null)
rs.close();
stmt.close();
conn.close();
System.out.println("déconnexion ok!");
}
catch ( SQLException E)
{
System.out.println(E);
JOptionPane.showMessageDialog(null,"Erreur de connexion à la base. disconnect(). Veuillez contacter votre administrateur système","Connexion",JOptionPane.WARNING_MESSAGE);
}
}

Voila c'est bon tout fonctionne et je te remercie pour ton aide.
:big)
0
Rejoignez-nous