greglover
Messages postés58Date d'inscriptionmardi 16 janvier 2007StatutMembreDernière intervention10 mars 2008
-
12 juin 2007 à 22:41
greglover
Messages postés58Date d'inscriptionmardi 16 janvier 2007StatutMembreDernière intervention10 mars 2008
-
13 juin 2007 à 01:12
Bonsoir,
j'ai un problème avec une classe importante de mon programme, problème que je n'arrive pas à résoudre sauf en "trichant un peu" ce qui double le temps d'execution du traitement (pas cool)
donc en gros j'ai une table récupérant les infos de la bdd
l'utilisateur fait ses modifications et hop la table est parsé et les valeurs renvoyés à la bdd (update)
La dernière colonne (montant facture) de la table est calculée en fonction des 3 colonnes précédentes (garderie matin, soir et mercredi).
Si je suis le traitement :
initialisation :
- je rempli la table (select)
- calcul la dernière colonne (à y réfléchir je sais pas pkoi puisque le champ garderie total enfant est justement ce montant calculé)
là, l'utilisateur entre les valeurs puis... clic sur valider :
met à jour la bdd (update)
relance initialisation
Je me retrouve à ce moment là avec les valeurs de garderie affichées dans le tableau et entrées dans la bdd (vérification faîtes) mais le montant total qui est bien affiché dans la dernière colonne n'est pas dans la bdd.. Pour qu'il y soit j'ai alors deux solutions : soit je triche comme je l'ai fais en ajoutant un update(false) (false permettant de faire le traitement silencieusement) soit je reclic sur valider et alors le montant total est, cette fois, présent dans la bdd.
Je ne vois pas ou est mon erreur et je désespère de trouver la solution.
J'espère que quelqu'un pourra m'aider.
Cordialement
Voici la classe complète (sauf bouton inutile à la compréhension du problème) pour que vous puissiez voir l'évolution du traitement :
/**
* This is the default constructor
*/
public Garderie(Montalembert m) {
fenetre = m;
setLayout(new BorderLayout());
setBounds(new Rectangle(0, 0, 800, 570));
add(getEntete(), BorderLayout.NORTH );
}
private JPanel getMain() {
if (main == null) {
main = new JPanel();
main.setSize(800, 570);
main.setLayout(new BorderLayout());
scrollPane = new JScrollPane(table);
scrollPane.setBorder(null);
scrollPane.setPreferredSize(new Dimension(800, 570));
main.add(scrollPane, BorderLayout.CENTER);
}
return main;
}
public void garderie()
{
try {
setSize(800, 570);
Vector columnNames = new Vector();
Vector data = new Vector();
try
{
// Se connecter à la base de donnée
Class.forName("com.mysql.jdbc.Driver");
Connection connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/test_prog","root","" );
// Récupérer les données des élèves
Statement stmt = (Statement) connection.createStatement(); String sql "SELECT nom_enfant,prenom_enfant,classe_enfant,garderie_matin_enfant,garderie_soir_enfant,garderie_mercredi_enfant,garderie_total_enfant FROM enfant WHERE `garderie_enfant` 'true' AND sortie_enfant='' ORDER BY classe_enfant DESC,nom_enfant,prenom_enfant";
ResultSet rs = (ResultSet) stmt.executeQuery( sql );
// Récupérer le titre des colonnes
ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();
// Récupérer le nombre de colonne
int columns = md.getColumnCount();
// Récupérer le nom des colonnes
for (int i = 1; i <= columns; i++)
{
if (i==7){columnNames.addElement("MONTANT TTC");break;}
columnNames.addElement( md.getColumnName(i).replace("_enfant", "").replace("_", " ").replace("garderie", "gard.").toUpperCase());
}
// Récupérer les données des colonnes
// 1. Test si ya quelquechose à lire, donc test si la classe existe
// 2. Remet le pointeur au début
// 3.Tant qu'il y a quelquechose à lire
if (rs.next())
{
rs.beforeFirst();
while (rs.next())
{
fenetre.setCourantPanel(Garderie.this);
Vector row = new Vector(columns);
//récupération des valeurs de la bdd
//prépare la ligne
for (int i = 1; i <= columns; i++)
{
row.addElement( rs.getString("nom_enfant") );
row.addElement( rs.getString("prenom_enfant") );
row.addElement( rs.getString("classe_enfant") );
row.addElement( rs.getString("garderie_matin_enfant") );
row.addElement( rs.getString("garderie_soir_enfant") );
row.addElement( rs.getString("garderie_mercredi_enfant"));
row.addElement( rs.getString("garderie_total_enfant"));
}
// ajoute la ligne
data.addElement( row );
}
}
else
{
JOptionPane.showMessageDialog(null, "Problème de base de donnée !!!", "Erreur", JOptionPane.ERROR_MESSAGE);
}
// Tout fermer
rs.close();
stmt.close();
}
catch(Exception e){}
// Créer la table avec les données de la base
TableModelCustom model = new TableModelCustom(data, columnNames);
// Rends certaines colonnes éditables
model.addEditableColumn(3);
model.addEditableColumn(4);
model.addEditableColumn(5);
// Application du modèle au tableau
table.setModel(model);
// Redimensionne
for (int i=0;i<=6;i++)
{
TableColumn column = table.getColumnModel().getColumn(i);
switch (i)
{
case 0:column.setMaxWidth(160);column.setMinWidth(140);break;
case 1:column.setMaxWidth(120);column.setMinWidth(100); break;
case 2:column.setMaxWidth(80);column.setMinWidth(60);break;
case 3:column.setMaxWidth(110);column.setMinWidth(100); break;
case 4:column.setMaxWidth(110);column.setMinWidth(100);break;
case 5:column.setMaxWidth(115);column.setMinWidth(100); break;
case 6:column.setMaxWidth(100);column.setMinWidth(75); break;
}
}
// Centre le contenu des cellules
DefaultTableCellRenderer custom = new DefaultTableCellRenderer();
custom.setHorizontalAlignment(SwingConstants.CENTER);
for (int k=0; k < table.getColumnCount(); k++) {
table.getColumnModel().getColumn(k).setCellRenderer(custom);
}
// Autorise le redimensionnement manuel et interdit le déplacement de colonne
table.getTableHeader().setReorderingAllowed(false);
table.getTableHeader().setResizingAllowed(true);
}
catch (Exception e) {}
go_calcul();
// ajout du panneau
add(getMain(), BorderLayout.CENTER);
}
public void go_calcul()
{
Calcul_garderie un_calcul = new Calcul_garderie();
for (int j = 0 ; j < table.getRowCount() ; j++)
{
DecimalFormat df = new DecimalFormat("########.00");
double montant=un_calcul.calculer(table.getValueAt(j, 0).toString(),table.getValueAt(j, 1).toString());
if (montant!=0) {
table.setValueAt(df.format(montant), j, 6);
}
}
}
public void update(boolean confirm)
{
DataBaseImpl base = new DataBaseImpl();
base.setParametre("127.0.0.1","root","","test_prog");
try
{
base.open();
// parse
for (int j = 0 ; j < table.getRowCount() ; j++)
{ base.execute("UPDATE `enfant` SET garderie_matin_enfant "+table.getValueAt(j, 3)+" , garderie_soir_enfant "+table.getValueAt(j, 4)+" , garderie_mercredi_enfant = "+table.getValueAt(j, 5)+", garderie_total_enfant = '"+table.getValueAt(j, 6).toString().replace(",", ".")+"' WHERE nom_enfant = '"+table.getValueAt(j, 0).toString().replace("'", "''")+"' AND prenom_enfant = '"+table.getValueAt(j, 1).toString().replace("'", "''")+"'");
}
base.close();
if (confirm){
JOptionPane.showMessageDialog(null, "Modification prise en compte", "Confirmation", JOptionPane.INFORMATION_MESSAGE);
}
}
catch(DataBaseException dbe)
{
JOptionPane.showMessageDialog(null, "Problème de base de donnée !!!", "Erreur", JOptionPane.ERROR_MESSAGE);
}
}