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

Error al generar nuevo registro en base de datos SQL

Estas en el tema de Error al generar nuevo registro en base de datos SQL en el foro de Java en Foros del Web. Buenas noches comunidad "Foro de la web", quiero agradecer y felicitar a todas y cada una de las personas, que con su conocimiento aportan a ...
  #1 (permalink)  
Antiguo 10/05/2015, 22:36
 
Fecha de Ingreso: mayo-2015
Ubicación: Medellin
Mensajes: 2
Antigüedad: 9 años
Puntos: 0
Pregunta Error al generar nuevo registro en base de datos SQL

Buenas noches comunidad "Foro de la web", quiero agradecer y felicitar a todas y cada una de las personas, que con su conocimiento aportan a la solución de inquietudes y formación de nuevos programadores.
Mi consulta es la siguiente: estoy iniciándome en el mundo de la programación java en el cual estoy desarrollando una aplicación que permita hacer el registro de personas a una empresa x, todo el procesos de asignación de personas a la base de datos ya está creada y se puede generar el primer registro de ingresos y salida:


Al guardar el primer registro, el código busca en una consulta la cedula o DNI del usuario, lo agrega colocándole la fecha y la hora_ini, dejando el campo hora_fin en blanco y lo guarda en una tabla llamada “Registros”, luego para hacer la salida el código valida si esta cedula o DNI está en la tabla “Registros” y le asigna la hora_fin.



El problema empieza cuando voy a generar el ingreso de la misma persona (ya que el sistema debe de permitir el ingreso y salida de una persona n cantidad de veces al día), pero lo que hace es que actualiza el mismo registro (En la tabla “Registros”, no tiene llave primaria para que permita duplicados).

Mi pregunta es cómo hacer como validar que al encontrar estos tres campos (fecha, hora_ini, hora_fin) llenos o con datos, me genere un nuevo registro?

Agradezco por la colaboración que me puedan brindar.

Dios les Bendiga.

Nota: dejo el codigo que uso para hacer los registros:
Código Java:
Ver original
  1. private void BTNCONSULTARActionPerformed(java.awt.event.ActionEvent evt) {                                            
  2.  
  3.         String idempleado=this.RCODIGO.getText();
  4.        
  5.        
  6.        
  7.         try {
  8.             PreparedStatement cst = con.getConnection().prepareStatement("{call BUSCAR_REGISTRO_ACTUAL(?)}");
  9.             cst .setString(1, idempleado);
  10.             r=cst .executeQuery();
  11.            
  12.              if(r.next()){
  13.                  
  14.                  JOptionPane.showMessageDialog(this,"Usuario Encontrado EN TABLA REGISTRO!!","Aviso",JOptionPane.INFORMATION_MESSAGE);
  15.              
  16.                  
  17.                     this.RCEDULA_EMPLEADO.setText(r.getString(1));
  18.                     this.RNOM_EMPLEADO.setText(r.getString(2));
  19.                     this.RAPE_EMPLEADO.setText(r.getString(3));
  20.                     this.RNOM_EMPLEADOR.setText(r.getString(4));
  21.                     this.RAPE_EMPLEADOR.setText(r.getString(5));
  22.                     this.RFECHA_INGRESO.setText(r.getString(6));
  23.                     this.RHORA_INGRESO.setText(r.getString(7));
  24.                     this.RHORA_SALIDA.setText(r.getString(8));
  25.                     this.RNOM_CONSECIONARIO.setText(r.getString(9));
  26.                     this.RACTIVIDAD.setText(r.getString(10));
  27.                     this.RMESA_SERVI.setText(r.getString(11));
  28.                    
  29.                     Calendar cal = Calendar.getInstance();
  30.                     String hora = cal.get(cal.HOUR)+":"+ cal.get(cal.MINUTE)+":"+ cal.get(cal.SECOND);
  31.                     String fecha = cal.get(cal.DAY_OF_MONTH)+"/"+ cal.get(cal.MONTH)+"/"+ cal.get(cal.YEAR);
  32.                      
  33. //                    if(this.RFECHA_INGRESO.getText().equals(RFECHA_INGRESO)&&(this.RHORA_INGRESO.getText().equals(RHORA_INGRESO)&&
  34. //                       (this.RHORA_SALIDA.getText().equals(RHORA_SALIDA)))){
  35. //                        this.registroNuevo();
  36. ////////                        
  37. //                        }
  38. //                    else
  39.                     if(this.RFECHA_INGRESO.getText().equals("")&&(this.RHORA_INGRESO.getText().equals(""))){
  40.                         this.RFECHA_INGRESO.setText(fecha.toString());
  41.                         this.RHORA_INGRESO.setText(hora);
  42.                         this.RBTNMODIFICAR_SALIDA.setEnabled(false);
  43.                        
  44.                         }else
  45.                         this.actualizarRegistro();
  46.                    
  47.                          bloquearCajas();      
  48.              }
  49.         else
  50.              {
  51.  
  52.                  try {
  53.                      PreparedStatement cst1 = con.getConnection().prepareStatement("{call BUSCAR_REGISTRO(?)}");
  54.                     cst1 .setString(1, idempleado);
  55.                     r=cst1 .executeQuery();
  56.  
  57.                  if(r.next()){
  58.                      
  59.                      
  60.            
  61.                     JOptionPane.showMessageDialog(this,"Usuario Encontrado EN CONSULTA SQL!!","Aviso",JOptionPane.INFORMATION_MESSAGE);
  62.                     this.RCEDULA_EMPLEADO.setText(r.getString(1));
  63.                     this.RNOM_EMPLEADO.setText(r.getString(2));
  64.                     this.RAPE_EMPLEADO.setText(r.getString(3));
  65.                     this.RNOM_EMPLEADOR.setText(r.getString(4));
  66.                     this.RAPE_EMPLEADOR.setText(r.getString(5));
  67. ////                    this.RFECHA_INGRESO.setText(r.getString(6));
  68. ////                    this.RHORA_INGRESO.setText(r.getString(7));
  69. ////                    this.RHORA_SALIDA.setText(r.getString(8));
  70.                     this.RNOM_CONSECIONARIO.setText(r.getString(6));
  71.                     this.RACTIVIDAD.setText(r.getString(7));
  72.                     this.RMESA_SERVI.setText(r.getString(8));
  73.                    
  74.                     //CODIGO PARA GENERAR LA FECHA Y HORAS DE INGRESO Y SALIDA
  75.                     Calendar cal = Calendar.getInstance();
  76.                     String hora = cal.get(cal.HOUR)+":"+ cal.get(cal.MINUTE)+":"+ cal.get(cal.SECOND);
  77.                     String fecha = cal.get(cal.DAY_OF_MONTH)+"/"+ cal.get(cal.MONTH)+"/"+ cal.get(cal.YEAR);
  78.                
  79.                         if(this.RFECHA_INGRESO.getText().equals("")&&(this.RHORA_INGRESO.getText().equals(""))){
  80.                         this.RFECHA_INGRESO.setText(fecha.toString());
  81.                         this.RHORA_INGRESO.setText(hora);
  82.                         this.RBTNMODIFICAR_SALIDA.setEnabled(false);
  83.                        
  84.                         }
  85. //                        else{
  86. ////                        
  87. //                        }
  88.                         bloquearCajas();
  89.                  }
  90.                  } catch (Exception e) {
  91.                  }
  92.                     }
  93.         } catch (Exception e) {
  94.         }
  95.        
  96.     }

Última edición por medinabao; 10/05/2015 a las 23:20
  #2 (permalink)  
Antiguo 10/05/2015, 23:21
Avatar de Andreslrz  
Fecha de Ingreso: septiembre-2008
Mensajes: 99
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Error al generar nuevo registro en base de datos SQL

Cita:
Mi pregunta es cómo hacer como validar que al encontrar estos tres campos (fecha, hora_ini, hora_fin) llenos o con datos, me genere un nuevo registro?
Tu pregunta no es clara, asi que te respondere hasta donde entendi. Primero, deberias poner las tablas para comprender mejor, ya que es una pregunta mas de bases de datos.

Cita:
El problema empieza cuando voy a generar el ingreso de la misma persona (ya que el sistema debe de permitir el ingreso y salida de una persona n cantidad de veces al día), pero lo que hace es que actualiza el mismo registro (En la tabla “Registros”, no tiene llave primaria para que permita duplicados).
Primero, no deberias sobreescrbir el registro, ese no es el principio de una base de datos. Para crear un nuevo registro simplemente lo insertas, la base de datos no es el modelo de objetos donde actualizas la informacion de estos, en ella si hay un nuevo ingreso, simplemente creas un nuevo registro, no hay necesidad de duplicar ni sobreescribir nada.

Sobre como generar un nuevo registro, simplemente es un insert a la tabla registro, en tu modelo debes tener la referencia del usuario (el DNI) con este ya creas la relacion, el que no tengas llave primaria en la tabla registro no afecta, pero tampoco beneficia, es mejor tenerla por referencia en ese caso podria ser (DNI_cliente, fecha, hora_ini) estos 3 como llave.

Por otro lado si usas los conceptos de POO te seria mas facil, y haces mas facil entender el codigo.

----
Edito aqui, antes no cargo la imagen, primero que todo deberias normalizar tu modelo de base de datos, separar registros de la tabla cliente.
  #3 (permalink)  
Antiguo 10/05/2015, 23:42
 
Fecha de Ingreso: mayo-2015
Ubicación: Medellin
Mensajes: 2
Antigüedad: 9 años
Puntos: 0
Respuesta: Error al generar nuevo registro en base de datos SQL

Caballero buen día, agradezco por su pronta respuesta, yo apenas empiezo con esto de la programaciín jajaja me disculpa sino uso adecuadamente los conceptos basicos de POO, en eso trabajo.

Adjunto las tablas para que tenga una idea mas general.

[URL="http://es.tinypic.com/view.php?pic=96go6q&s=8#.VVBBffAYHeM"]http://es.tinypic.com/view.php?pic=96go6q&s=8#.VVBBffAYHeM[/URL]

Mil gracias de nuevo.

Última edición por medinabao; 10/05/2015 a las 23:51
  #4 (permalink)  
Antiguo 11/05/2015, 01:27
Avatar de Andreslrz  
Fecha de Ingreso: septiembre-2008
Mensajes: 99
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Error al generar nuevo registro en base de datos SQL

tu principal problema es la normalizacion de las tablas, simplificando lo que entendi quedarian asi:

Persona (ID, nombre, apellido, correo)
Empleado(ID_persona, direccion, telefono)
Consecionario(ID, nombre, mesa_servicios)
Emple_consecionario(ID_consecionario, ID_empleador, ID_Empleado)
Registro(ID_empleado, ID_consecionario, fecha, hora_ini, hora_fin, actividad)

Persona seria el empleador, en esa parte con empleado hice una especializacion, una persona es un empleado. Como tienen los mismos datos se hace eso para evitar la redundancia de informacion, en persona y empleado el id de persona seria la llave.

Hasta esa parte entendi, las consultas en java, parece que estas llamando procedimientos. no veo donde insertes datos. pero si ya sabes consultas es lo de menos, solo las organizas.

Ahora, la parte de los registros seria como te dije anteriormente, no actualizar la tabla, sino, crear un nuevo registro, es informacion nueva y se debe guardar, el principio de tener una base de datos es conservar informacion de forma bien estructurada y sin redundancia.

divide las consultas en metodos, un metodo Buscar, un metodo insertar, uno actualizar, y uno eliminar si necesitas eliminar.

En POO es similar a lo de base de datos, pero no es lo mismo, divide en objetos.

En literatura algunos autores recomiendan tener metdos de no mas de 20 lineas de codigo, aunque otros dicen que no mas de 50, en fin el tamañño del metodo depende de la funcionalidad, pero si es muy grande puede que uno solo este haciendo muchas funcionalidades y es mejor dividirlo

en fin, te dejo esto para que leas:
http://es.wikipedia.org/wiki/Normali...bases_de_datos
http://es.wikipedia.org/wiki/Program...tada_a_objetos

http://java.ciberaula.com/articulo/t...ntada_objetos/

Siempre es bueno documentarce un poco, antes de empezar un trabajo, pero hay veces falta guia, lee y comprenderas mejor lo que debes hacer.

Etiquetas: programa, registro, sql, string
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 19:34.