Pagina 4 di 4 primaprima ... 2 3 4
Visualizzazione dei risultati da 31 a 36 su 36
  1. #31
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    28
    Originariamente inviato da superpisu
    signal stavo pensando una cosa alternativa alla questione di modificare la riga scrivendo direttamente nelle celle.
    volevo fare che, io seleziono una riga e quando premo il tasto Aggiorna si apre un popup con i dati della riga messi in delle JTextField del popup, che ne dici?
    questo metodo l'hai mai provato?
    Per me è troppo macchinoso...
    Beh se non permetti la modifica della chiave, questa non cambia: puoi quindi prendere i restanti dati dalla tabella e supponendo che la chiave della riga modificata sia KEY fare un

    UPDATE tabella SET NomeFile = ..., Mb = ... WHERE chiave = KEY

    Per quanto riguarda la struttura dati, se per esempio usi un Set<VoceDistributore> set, la struttura del metodo è:
    codice:
    public Object getValueAt(int row, int column) {
         Iterator<VodeDistributore> it = set.iterator();
         int i = 0; 
         while (i++ < row) it.next();
                VoceDeposito vd = it.next();
         if (column == 1) 
            //ritorni l'oggetto della colonna 1, usando i metodi getX di VoceDistributore su vd
         else if (column == 2) 
            //ritorni l'oggetto della colonna 2    
         ...
    }

  2. #32
    ciao signal, beh anche l'idea di non far modificare la chiave mi sembra buona, però può avere un difetto di usabilità..nel senso, come fa una persona che si mette davanti al mio programma a capire che per modificare deve scrivere in quei determinati campi e poi premere aggiorna, naturalmente io lo so e mi andrebbe bene, solo che devo considerare che non ci sarò io li davanti. ecco perchè gli volevo fare il popup.
    tu che dici?

    ps dico una cazzata,
    nel momento che lui modifica le celle della riga io mi prendo l'indice int indice =table.selectRow();

    poi dopo che ha modificato le celle e premuto "Aggiorna", prelevo tutti i campi di quella riga

    e faccio

    UPDATE tabella SET NomeFile = ..., Mb = ...ecc ecc WHERE ID = indice;

    secondo te, può funzionare oppure l'indice di riga non corrisponde all'id della tabella..
    ciao

  3. #33
    allora l'ultima parte era appunto una cazzata, infatti non potrebbe mai corrispondere l'indice della JTable con l'id della tabella del DB.

    cmq signal stavo pensando che per fare quello che dici tu e cioè:

    Beh se non permetti la modifica della chiave, questa non cambia: puoi quindi prendere i restanti dati dalla tabella e supponendo che la chiave della riga modificata sia KEY fare un

    UPDATE tabella SET NomeFile = ..., Mb = ... WHERE chiave = KEY

    potrebbe succedere che una persona incomincia a modificare le celle quelle senza chiave della riga e poi invece di cliccare su "aggiorna" va a modificare un'altra riga, naturalmente adesso è successo un guaio perchè la riga modificata sulla JTable non è stata modificata nel DB, quindi ci sarebbe da gestire anche questa cosa...oddio che macello.
    qualche idea?

  4. #34
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    28
    Ripeto: per me è meglio che cerchi di capire quella storia degli updatable ResultSet di ODBC. Comunque per impedire che un utente modifichi più righe ci sono varie strade. Ad esempio puoi registrare il primo cambiamento (con gli eventi di tipo TableModelEvent ed i relativi listeners) e impedire all'utente di farne altri su righe diverse, giocando sul metodo isCellEditable(int r, int c) e con un po' di variabili d'istanza. Però se non hai dimestichezza con questi eventi e come si generano è meglio che utilizzi la tua strada e consentire la modifica attraverso pop-up, ad esempio JDialog. Così puoi anche usare delle strutture di Swing tipo JFormattedTextField, MaskFormatter, DocumentFilter... per impedire input non validi. Altrimenti nella tabella avresti dovuto definirti un apposito editor: altro lavoro!

  5. #35
    allora vada per il JDialog, solo che mi devi dare qualche dritta.

    Allora quando premo il pulsante "aggiorna" faccio:
    codice:
    else if(o==aggiorna){
    				
    				try{
    				
    					
    				if(table.getSelectedRow()==-1){//se non hai selezionato niente
    					JOptionPane.showMessageDialog(null,"Devi selezionare una riga", "Attenzione",JOptionPane.ERROR_MESSAGE);
    					}else{
    						
    					String titolo = (String)table.getValueAt(table.getSelectedRow(),0);
    					String autore = (String)table.getValueAt(table.getSelectedRow(),1);
    					String tipologia = (String) table.getValueAt(table.getSelectedRow(),2);
    					String nome_file = (String) table.getValueAt(table.getSelectedRow(),3);
    				    int dimensione = (Integer)table.getValueAt(table.getSelectedRow(),4);
    					String supporto = (String) table.getValueAt(table.getSelectedRow(),5);
    					String idsupporto = (String) table.getValueAt(table.getSelectedRow(),6);
    					String commento = (String) table.getValueAt(table.getSelectedRow(),7);
    					
    					VoceDistributore v=new VoceDistributore(titolo,autore,tipologia,nome_file,dimensione,supporto,idsupporto,commento);
    quindi i dati sulla JTable me li sono presi, ora per farmi comparire la JDialog con questi dati nelle JTextField che faccio? in modo che io poi li modifico dalla JDialog e mando la query con i nuovi dati e quelli vecchi.
    grazie signal

  6. #36

    impossibile effettuare l'update della chiave

    ciao ragazzi,

    anche io stavo realizzando una finestra in cui è presente una jtable che riceve dati da un database. inoltre c'è un tasto, se l'utente modifica il contenuto di una riga e preme il tasto aggiorna, Bupdate, viene effettuato l'update sul database.
    c'è però un errore quando provo a modificare la chiave.
    il motivo è che non appena si genera l'evento di variazione del dato in tabella perdo il vecchio valore della chiave. ho provato anche ad introdurre un vector di appoggio riga_app ma non appena viene modificato il vector originale viene modificato anche questo di appoggio. ho usato, per la copia, sia il metodo clone di vector sia la procedura "manuale" con il for

    vi riporto il codice del frame in questione, con evidenziate le parte che riguardano la gestione della tabella.

    potreste darmi una mano???

    grazie



    codice:
    import java.awt.BorderLayout;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import java.awt.Dimension;
    import javax.swing.JLabel;
    import java.awt.Rectangle;
    import javax.swing.JTextField;
    import javax.swing.JButton;
    import java.awt.Font;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.Vector;
    
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.JOptionPane;
    
    public class FrameFornitore extends JFrame {
    
    	private static final long serialVersionUID = 1L;
    
    	private JPanel jContentPane = null;
    
    	private JLabel Lpiva = null;
    
    	private JTextField Tpiva = null;
    
    	private JTextField Tdescrizione = null;
    
    	private JLabel Ldescrizione = null;
    
    	private JLabel Lprodotto = null;
    
    	private JTextField Tprodotto = null;
    
    	private JButton Bins = null;
    
    	private JScrollPane jScrollPane = null;
    
    	private JTable jTable = null;
    	
    	private DefaultTableModel modello=null;
    	
    	private Vector righe;  
    	private Vector righe_app = new Vector();  //  @jve:decl-index=0:
    	
    	private Vector colonne;  //  @jve:decl-index=0:
    	
    	private Connection connection;
    
    	private Query q = null;  //  @jve:decl-index=0:
    
    	private JButton Bcancella = null;
    
    	private JButton Bupdate = null;
    	
    	private int riga_selezionata=-1;
    	
    	private Vector nuovi_valori = new Vector();  //  @jve:decl-index=0:
    
    	/**
    	 * This is the default constructor
    	 */
    	public FrameFornitore(Connection c) {
    		super();
    		connection=c;
    		initialize();
    	}
    
    	/**
    	 * This method initializes this
    	 * 
    	 * @return void
    	 */
    	private void initialize() {
    		this.setSize(625, 307);
    		this.setContentPane(getJContentPane());
    		this.setTitle("Fornitori");
    		this.setVisible(true);
    		this.addWindowListener(new java.awt.event.WindowAdapter() {
    			public void windowClosing(java.awt.event.WindowEvent e) {
    				dispose();
    			}
    		});
    	}
    
    	/**
    	 * This method initializes jContentPane
    	 * 
    	 * @return javax.swing.JPanel
    	 */
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			Lprodotto = new JLabel();
    			Lprodotto.setBounds(new Rectangle(428, 15, 73, 16));
    			Lprodotto.setText("Prodotto");
    			Ldescrizione = new JLabel();
    			Ldescrizione.setBounds(new Rectangle(226, 15, 111, 16));
    			Ldescrizione.setText("Denominazione");
    			Lpiva = new JLabel();
    			Lpiva.setBounds(new Rectangle(10, 15, 83, 16));
    			Lpiva.setText("Partita Iva");
    			jContentPane = new JPanel();
    			jContentPane.setLayout(null);
    			jContentPane.add(Lpiva, null);
    			jContentPane.add(getTpiva(), null);
    			jContentPane.add(getTdescrizione(), null);
    			jContentPane.add(Ldescrizione, null);
    			jContentPane.add(Lprodotto, null);
    			jContentPane.add(getTprodotto(), null);
    			jContentPane.add(getBins(), null);
    			jContentPane.add(getJScrollPane(), null);
    			jContentPane.add(getBcancella(), null);
    			jContentPane.add(getBupdate(), null);
    		}
    		return jContentPane;
    	}
    
    	/**
    	 * This method initializes Tpiva	
    	 * 	
    	 * @return javax.swing.JTextField	
    	 */
    	private JTextField getTpiva() {
    		if (Tpiva == null) {
    			Tpiva = new JTextField();
    			Tpiva.setBounds(new Rectangle(10, 39, 180, 20));
    		}
    		return Tpiva;
    	}
    
    	/**
    	 * This method initializes Tdescrizione	
    	 * 	
    	 * @return javax.swing.JTextField	
    	 */
    	private JTextField getTdescrizione() {
    		if (Tdescrizione == null) {
    			Tdescrizione = new JTextField();
    			Tdescrizione.setBounds(new Rectangle(225, 39, 181, 20));
    		}
    		return Tdescrizione;
    	}
    
    	/**
    	 * This method initializes Tprodotto	
    	 * 	
    	 * @return javax.swing.JTextField	
    	 */
    	private JTextField getTprodotto() {
    		if (Tprodotto == null) {
    			Tprodotto = new JTextField();
    			Tprodotto.setBounds(new Rectangle(431, 39, 170, 20));
    		}
    		return Tprodotto;
    	}
    
    	/**
    	 * This method initializes Bins	
    	 * 	
    	 * @return javax.swing.JButton	
    	 */
    	private JButton getBins() {
    		if (Bins == null) {
    			Bins = new JButton();
    			Bins.setBounds(new Rectangle(232, 71, 155, 27));
    			Bins.setFont(new Font("Eras Demi ITC", Font.PLAIN, 18));
    			Bins.setText("Inserisci");
    			Bins.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					if(Tpiva.getText().compareTo("")==0||Tdescrizione.getText().compareTo("")==0||Tprodotto.getText().compareTo("")==0)
    						JOptionPane.showMessageDialog(null, "Tutti i messaggi sono obbligatori");
    					else
    					{
    						Insert ins = new Insert(connection);
    						Fornitore venditore = new Fornitore();
    						venditore.setPiva(Tpiva.getText());
    						venditore.setDenominazione(Tdescrizione.getText());
    						venditore.setProdotto(Tprodotto.getText());
    						try{
    						ins.inserisciFornitore(venditore);
    						JOptionPane.showMessageDialog(null, "Aggiornamento avvenuto con successo");
    						eseguiQ();
    						
    						}catch(SQLException sqlex){JOptionPane.showMessageDialog(null, sqlex.getMessage().toString());}
    					}
    				
    				}
    			});
    		}
    		return Bins;
    	}
    
    	/**
    	 * This method initializes jScrollPane	
    	 * 	
    	 * @return javax.swing.JScrollPane	
    	 */
    	private JScrollPane getJScrollPane() {
    		if (jScrollPane == null) {
    			jScrollPane = new JScrollPane();
    			jScrollPane.setBounds(new Rectangle(0, 117, 616, 121));
    			jScrollPane.setViewportView(getJTable());
    		}
    		return jScrollPane;
    	}
    
    	/**
    	 * This method initializes jTable	
    	 * 	
    	 * @return javax.swing.JTable	
    	 */
    	private JTable getJTable() {
    		if (jTable == null) {
    			jTable = new JTable();
    			q= new Query("select * from fornitore",connection);
    			righe=q.getRighe();
    			for(int i=0; i<righe.size();i++)
    			{
    				righe_app.addElement(righe.elementAt(i));
    			}
    			colonne=q.getAttributi();
    			modello=new DefaultTableModel();
    			 modello.addTableModelListener(new javax.swing.event.TableModelListener() {
    				public void tableChanged(javax.swing.event.TableModelEvent e) {
    		
    					riga_selezionata=e.getLastRow();
    					
    					if(riga_selezionata==-1)
    						return;
    
    					System.out.println("ecco: "+righe_app.elementAt(riga_selezionata));
    					
    					if(nuovi_valori.size()>3)
    						nuovi_valori.clear();
    					
    					for(int i=0; i<jTable.getColumnCount();i++){
    						String c=jTable.getModel().getValueAt(riga_selezionata, i).toString();
    						nuovi_valori.addElement(c);
    						System.out.println(nuovi_valori.elementAt(i));
    					}
    					//nuovi_valori.addElement(jTable.getModel().getValueAt(e.getLastRow(), i).toString());
    				}
    			}); 
    			modello.setDataVector(righe, colonne);
    			jTable.setModel(modello);
    		}
    		return jTable;
    	}
    	
    	private void eseguiQ()
    	{
    		try
    		{
    		q.updateRS("select * from fornitore");
    		righe=q.getRighe();
    		for(int i=0; i<righe.size();i++)
    		{
    			righe_app.addElement(righe.elementAt(i));
    		}
    			
    		//righe_app=(Vector)righe.clone();
    		modello.setDataVector(righe, colonne);
    	
    		}catch(SQLException e){}
    		
    	
    	} 
    
    	/**
    	 * This method initializes Bcancella	
    	 * 	
    	 * @return javax.swing.JButton	
    	 */
    	private JButton getBcancella() {
    		if (Bcancella == null) {
    			Bcancella = new JButton();
    			Bcancella.setBounds(new Rectangle(247, 246, 196, 32));
    			Bcancella.setFont(new Font("Eras Demi ITC", Font.PLAIN, 18));
    			Bcancella.setText("Cancella Fornitore");
    			Bcancella.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
    				}
    			});
    		}
    		return Bcancella;
    	}
    
    	/**
    	 * This method initializes Bupdate	
    	 * 	
    	 * @return javax.swing.JButton	
    	 */
    	private JButton getBupdate() {
    		if (Bupdate == null) {
    			Bupdate = new JButton();
    			Bupdate.setBounds(new Rectangle(458, 249, 128, 30));
    			Bupdate.setFont(new Font("Eras Demi ITC", Font.PLAIN, 18));
    			Bupdate.setText("Aggiorna");
    			Bupdate.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					System.out.println(riga_selezionata);
    					try{
    					updateTable();
    					eseguiQ();
    					nuovi_valori.clear();
    					}catch(SQLException sex){
    						JOptionPane.showMessageDialog(null, sex.getMessage().toString());
    						sex.getStackTrace();
    						}
    				}
    			}); 
    		}
    		return Bupdate;
    	}
    	
    	private void updateTable() throws SQLException
    	{
    		if(nuovi_valori.size()==0)
    			JOptionPane.showMessageDialog(null, "dopo aver modificato la riga, dai invio e quindi premi su aggiorna.");
    		else
    		{
    			
    		String denom;
    		String piva;
    		String prod;
    		String vpiva=null;
    		int index1=righe_app.elementAt(riga_selezionata).toString().indexOf(", ");
    		int index2=righe_app.elementAt(riga_selezionata).toString().lastIndexOf(",");
    		vpiva=righe_app.elementAt(riga_selezionata).toString().substring(index1+2, index2);
    		
    		PreparedStatement update;
    		
    		update=connection.prepareStatement("UPDATE fornitore set Piva=?, Denominazione=?, Prodotto=? where Piva=?");
    		
    		denom=nuovi_valori.elementAt(0).toString();
    		piva=nuovi_valori.elementAt(1).toString();
    		prod=nuovi_valori.elementAt(2).toString();
    		System.out.println("UPDATE fornitore set Piva="+piva+", Denominazione=?"+denom+", Prodotto=?"+"prod"+ "where Piva=?"+vpiva);
    		System.out.println(righe_app.elementAt(riga_selezionata));
    		update.setString(1, piva);
    	    update.setString(2, denom);
    		update.setString(3, prod);
    		update.setString(4, vpiva);
    		update.executeUpdate();
    		
    		}
    	} 
    
    }  //  @jve:decl-index=0:visual-constraint="10,10"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.