AlexD979 Geschrieben 11. März 2003 Geschrieben 11. März 2003 Hallo! Ich habe eine Anwendung gebaut die unter Swing eine Öberfläche erstellt in der eine JTable mittels SQL Select mit Daten aus einer Oracle Datenbank gefüllt wird. Soweit so gut,... ich kann auch einzelne Zellen markieren und mit einem Actionistener diese "Löschen" in dem ich einen Update in der Datenbank durchführe und ein Flag auf N stat Y setze. Die Datensätze dürfen physikalisch nicht gelöscht werden nur "inaktiv" gesetzt werden. Wie schaffe ich es das nach dem Update der Datenbank auf die Tabelle in der Ansicht geupdated wird ?? Ich habe schon mit FireTableDataChanged probiert, ich habe es mit repaint() probiert nichts hilft. Wer kann mir da den nötigen Denkanstoß geben ?? Quelltext: // Zweites Panel Produkte try { // SQL-Select-Befehl sql = "SELECT PRODUKT FROM PRODUKTE WHERE AKTIV='Y' ORDER BY ID"; stmt = con.createStatement(); result = stmt.executeQuery(sql); ResultSetMetaData metaData = result.getMetaData(); int numberOfColumns = metaData.getColumnCount(); Vector columnNames = new Vector(); columnNames.addElement("Produkt"); //Alle Reihen einlesen Vector rows = new Vector(); while (result.next()) { Vector newRow = new Vector(); for (int i = 1; i <= metaData.getColumnCount(); i++) { newRow.addElement(result.getObject(i)); } rows.addElement(newRow); } result.close(); stmt.close(); tabelle1 = new JTable(rows, columnNames); tabelle1.getTableHeader().setReorderingAllowed(false); } catch (SQLException e) { JOptionPane.showMessageDialog( null, "Fehler beim Auslesen der Datensätze", "Administration - Produkte - Einlesen", JOptionPane.ERROR_MESSAGE); } JScrollPane jsp1 = new JScrollPane(tabelle1); pan2.add(jsp1, BorderLayout.CENTER); JButton but_akt_p2 = new JButton("Aktualisieren"); JButton but_neu_p2 = new JButton("Neuer Datensatz"); JButton but_del_p2 = new JButton("Löschen"); but_del_p2.setEnabled(true); but_akt_p2.setEnabled(false); Box box2 = Box.createHorizontalBox(); box2.add(but_akt_p2); box2.add(but_neu_p2); box2.add(but_del_p2); // Button "Neuer Datensatz" but_neu_p2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { String ret = (String) JOptionPane.showInputDialog( getContentPane(), "Bitte neuen Datensatz eingeben"); System.out.println(ret); try { sql = "INSERT INTO PRODUKTE VALUES(PROD_SEQ.NEXTVAL,'" + ret + "','Y')"; stmt = con.createStatement(); result = stmt.executeQuery(sql); result.close(); stmt.close(); } catch (SQLException exp) { JOptionPane.showMessageDialog( null, "Fehler beim Anlegen des Datensatzes", "Administration - Produkte - Eingabe", JOptionPane.ERROR_MESSAGE); } } }); // Funktion "Löschen" implementieren durch setzen des Aktiv-Flags auf 'N' but_del_p2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { int selected= tabelle1.getSelectedRow(); try { sql = "UPDATE PRODUKTE SET AKTIV='N' WHERE ID="+selected+""; stmt = con.createStatement(); result = stmt.executeQuery(sql); result.close(); stmt.close(); tabelle1.firePropertyChange(sql,true, true); } catch (SQLException e) { } } }); pan2.add(box2, BorderLayout.SOUTH); Zitieren
Jaraz Geschrieben 11. März 2003 Geschrieben 11. März 2003 Hi, benutze ein TableModel und implementiere TableModelListener. http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#modelchange Gruß Jaraz Zitieren
AlexD979 Geschrieben 18. Juni 2003 Autor Geschrieben 18. Juni 2003 Hallo, Ich bekomme es einfach nicht hin, ich habe nun schon so oft dran rumgedoktert, ich weiß nicht wie ich meine Daten aus meiner SQL Abfrage in mein Tablemodel bekomme. Im Moment übergebe ich die Daten in einem Vector, ich weiß aber nicht wie ich den Code anpasse damit das mit einem Object (?) funktioniert! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.