Foros del Web » Programación para mayores de 30 ;) » Java »

Duda(Postie las Excepciones) en el post 10

Estas en el tema de Duda(Postie las Excepciones) en el post 10 en el foro de Java en Foros del Web. Tengo este codigo en un frame para eliminar un registro en un acces y el problema es que en la ventana al borrar un registro ...
  #1 (permalink)  
Antiguo 05/04/2009, 20:40
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Duda(Postie las Excepciones) en el post 10

Tengo este codigo en un frame para eliminar un registro en un acces y el problema es que en la ventana al borrar un registro queda eliminado, pero al revisar el acces el registro aun está lo que no entiendo es porque en el frame me aparece que el registro no existe siendo que aun está en el acces :

Para Ingresar y Modificar los registros en el acces me corre super bien, pero al momento de eliminarlos no lo hace....

AYUDA PLZ!!

El codigo que estoy usando es este:

if(ae.getSource().equals(btnEliminar))
{
try {
Connection conexion = DriverManager.getConnection("jdbc:odbc:SISTEMA");
Statement sentencia = conexion.createStatement(); // Crear el objeto Statement

String Cadena = new String("");
Cadena = "SELECT Rut, Nombre, Edad FROM Ingresos WHERE Rut = '"+txtRut.getText()+"'";
resultado = sentencia.executeQuery(Cadena);
if (resultado.next())
{
JOptionPane.showMessageDialog(f,"Se ah eliminado registro : "+txtNombre.getText(),
"AVISO",JOptionPane.INFORMATION_MESSAGE, new ImageIcon("imagen/diablo.gif"));
limpia();
resultado = sentencia.executeQuery("DELETE * FROM Ingresos WHERE Rut = '"+txtRut.getText()+"'");


}
else
{
JOptionPane.showMessageDialog(f,"Eliminacion Fallida","AVISO",JOptionPane.ERROR_MESSAGE);
limpia();
}

}
catch(SQLException ex){}
}



PD: Si es un error muy tonto digalo igual :)

Última edición por Panshop; 06/04/2009 a las 14:21
  #2 (permalink)  
Antiguo 06/04/2009, 00:14
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Duda

Si no tuvieras un bloque catch "ciego", un catch que no hace nada ,verías donde está el error .
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 06/04/2009, 11:14
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Duda

jejeje ese no es el problema, lo tengo en los frames que ingresa y modifica los registros en el acces y me corren bien, pero el problema de este es que la query no me está corriendo bien en el eliminar

alguna otra sugerencia : ?
  #4 (permalink)  
Antiguo 06/04/2009, 11:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Duda

No he dicho que sea el problema. He dicho que no ves el problema por que tienes ese catch que no hace mas que enmascarar errores y es una practica totalmente desrecomendada.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 06/04/2009, 12:37
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Duda

y que seria recomendable (disculpa mi ignorancia en estos temas, pero soy estudiante de programacion y re100 es mi tercer semestre y apenas este semestre entramos con coneccion a base de datos desde java)
U.u, me podrias ayudar o decir porque no está borrandome los registros si en los otros 2 frames trabaja bien. Esto no lo estoy haciendo por una nota en la u, lo hago por mi propia voluntad de aprender, solo eso.... porque el profesor solo nos enseño el ingresar.
si quieres ver el codigo completo avisame.
  #6 (permalink)  
Antiguo 06/04/2009, 12:56
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Duda

Hola, en esta linea esta el problema

Código PHP:
sentencia.executeQuery("DELETE * FROM Ingresos WHERE Rut = '"+txtRut.getText()+"'"); 
para hacer una consulta se usa executeQuery pero para hacer un insert, update o delete se usa la instruccion executeUpdate, o sea que deberia ser asi

Código PHP:
sentencia.executeUpdate("DELETE * FROM Ingresos WHERE Rut = '"+txtRut.getText()+"'"); 
Saludos
  #7 (permalink)  
Antiguo 06/04/2009, 12:57
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Duda

Cita:
catch(SQLException ex){}
Debería ser, como mínimo, algo así:
Cita:
catch(SQLException ex){ ex.printStackTrace();
}
Si no, cuando ocurre un error simplemente salta al catch, tú no imprimes nada y entonces no sabes que ha pasado. Eso es lo que se conoce como un catch "ciego", por que lo captura todo y no dice nada.

Cuando veas el mensaje por consola, sabrás de donde viene el error. .

S!

PD: El error en sí es muy tonto y muy típico, a mi todavía me pasa de vez en cuando , pero si te digo cual es, no aprenderás a encontrar tus propios errores .
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #8 (permalink)  
Antiguo 06/04/2009, 13:02
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Duda

gracias green por el consejo desde ahora usare eso en el catch para verlos y poder arreglarlos :D y tambien gracias drac, eso lo probare ahora y les cuento ^^
  #9 (permalink)  
Antiguo 06/04/2009, 13:03
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda

Lo que te está diciendo GreenEyed es que cuando captures una excepción, como mínimo, saca en un log o en consola el mensaje de la excepción.

Es decir, que no hagas nunca:

Código java:
Ver original
  1. catch(SQLException ex){}

Si haces eso, no ves dónde ni por qué se produce un error. Luego vienes aquí al foro y dices "tengo un error" pero no dices cuál es, y parece que quieras que nosotros lo adivinemos.

Si en lugar de eso, cuando capturas la excepción sacas el ex.getMessage() (o incluso la StackTrace, según el caso) a un archivo de log o por consola. Entonces lees el mensaje de la excepción y tienes una pista mejor para saber qué pasa. Puedes venir al foro y decir "me da esta excepción blabla" que es algo más útil y ayuda un poco más para que te podamos decir algo.
  #10 (permalink)  
Antiguo 06/04/2009, 13:23
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Duda

D:
esta bien ^^
ahora me salen las excepciones:
Código PHP:
java.sql.SQLExceptionNo ResultSet was produced
    at sun
.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:259)
    
at Elimina$EventoBoton.actionPerformed(Elimina.java:136)
    
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    
at java.awt.Component.processMouseEvent(Component.java:6134)
    
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    
at java.awt.Component.processEvent(Component.java:5899)
    
at java.awt.Container.processEvent(Container.java:2023)
    
at java.awt.Component.dispatchEventImpl(Component.java:4501)
    
at java.awt.Container.dispatchEventImpl(Container.java:2081)
    
at java.awt.Component.dispatchEvent(Component.java:4331)
    
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301)
    
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965)
    
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895)
    
at java.awt.Container.dispatchEventImpl(Container.java:2067)
    
at java.awt.Window.dispatchEventImpl(Window.java:2458)
    
at java.awt.Component.dispatchEvent(Component.java:4331)
    
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122
Salu2!
PD: desde ahora no olvidare lo de las excepciones
  #11 (permalink)  
Antiguo 06/04/2009, 14:29
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Duda(Postie las Excepciones) en el post 10

Ah y se me paso, no se lo asignes a resultado, ya que el executeUpdate no te regresa un resultset si no un int
  #12 (permalink)  
Antiguo 06/04/2009, 14:53
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda(Postie las Excepciones) en el post 10

Ahora puedes ver exactamente lo que te decía drac94 más arriba. La excepción te dice "No ResultSet was produced", es decir, que tu query no produce un resultado. Como decía drac94, executeQuery es para querys que producen un resultado (SELECT).
  #13 (permalink)  
Antiguo 06/04/2009, 15:15
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Duda(Postie las Excepciones) en el post 10

gracias a los 3 por sus respuestas, me ah quedado mas claro este tema ^^
mañana me toca clases de este ramo, asi que respondere otras dudas que tenga con el profesor. Lo que note raro fue que en el frame "modificar" le tengo puesto el update con el resultado = sentencia.executeQuery y me funciona bien, pero mañana lo respondere.

GRACIAS ^^ eh aprendido mas en este foro :P ayudan harto ^^
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:14.