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

[SOLUCIONADO] Error al insertar datos en Access desde Netbeans

Estas en el tema de Error al insertar datos en Access desde Netbeans en el foro de Java en Foros del Web. Hola, estoy creando una aplicación en la cual inserto datos en Access 2010 desde NetBeans 7.4. Tengo 3 frames: Clientes (frame principal), Censo (frame 2) ...
  #1 (permalink)  
Antiguo 11/03/2014, 07:20
 
Fecha de Ingreso: marzo-2014
Mensajes: 11
Antigüedad: 10 años, 1 mes
Puntos: 0
Error al insertar datos en Access desde Netbeans

Hola, estoy creando una aplicación en la cual inserto datos en Access 2010 desde NetBeans 7.4. Tengo 3 frames: Clientes (frame principal), Censo (frame 2) y Observacion (frame 3).
En Clientes inserto: Nombre_cliente, codigo, dirección, grupo, tarifa, etc. Todos estos datos si se insertan.
En Censo tengo un jTextfield (es público) en el que se insertan datos del censo y un total guardado en un jLabel (ESTOS 2 DATOS NO SE INSERTAN)
En Observación tengo un jTextfield (es público) en el que se insertan datos sobre una observación hecha. (ESTE DATO TAMPOCO SE INSERTA)

Este es el código del botón registrar:


private void registrarActionPerformed(java.awt.event.ActionEven t evt) {

Censo cen = new Censo();
Observacion ob = new Observacion();

try
{
resultado = sentencia.executeQuery("INSERT INTO Clientes VALUES("+codigo.getText()+",'"+cliente.getText()+" ','"+direccion.getText()+"','"+grupo.getText()+"', "+subgrupo.getText()+","+serie.getText()+",'"+tari fa.getText()+"','"+ob.datosObservacion.getText()+"','"+TipoTrabajo.getSelectedItem()+"','"+cen.datosCenso.getText()+"')");

}
catch (SQLException c){
JOptionPane.showMessageDialog(null, "error :" + c.getMessage());
}
}


Cuando hago un line breakpoint y paso el cursor por ob.datosObservacion.getText() y cen.datosCenso.getText()
me sale este mensaje "is not a known variable in the current context"
  #2 (permalink)  
Antiguo 11/03/2014, 08:47
 
Fecha de Ingreso: mayo-2013
Ubicación: Armenia, Quindio, Colombia,
Mensajes: 95
Antigüedad: 11 años
Puntos: 3
Respuesta: Error al insertar datos en Access desde Netbeans

Hola,
Y si lo terminas de ejecutar ¿que pasa?
salu2;
  #3 (permalink)  
Antiguo 11/03/2014, 10:44
 
Fecha de Ingreso: marzo-2014
Mensajes: 11
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Error al insertar datos en Access desde Netbeans

Ya lo terminé de ejecutar, pero no inserta en Access la información que viene de los otros 2 frames. Guarda un valor nulo.
  #4 (permalink)  
Antiguo 11/03/2014, 11:14
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Error al insertar datos en Access desde Netbeans

Lo que sucede es que no estás obteniendo los datos de las ventanas que tienes abiertas, sino que estás creando otras instancias de Censo y de Observación con estas líneas
Código Java:
Ver original
  1. Censo cen = new Censo();
  2. Observacion ob = new Observacion();
Estas instancias de Censo y Observacion son nuevas, no son las que tienes abiertas. Si añadieras
Código Java:
Ver original
  1. cen.setVisible(true);
  2. ob.setVisible(true);
podrías verlas.
Lo que necesitas no es crear una nueva instancia, sino usar el objeto que ya tienes y de ahí obtener los datos. ¿Cómo se logra? Con el Patrón Singleton.
Busca en Google, hay mucha información.
Te dejo un poco de código para que te orientes. Debes modificar la clase Censo y la clase Observacion de la siguiente manera:
Código Java:
Ver original
  1. public class Censo extends Jframe
  2. {
  3.     // Esta será la única instancia de la clase Censo
  4.     private static Censo instance;
  5.  
  6.     // Constructor privado, para evitar que se creen instancias
  7.     // nuevas desde fuera de la clase
  8.     private Censo()
  9.     {
  10.          super();
  11.          // todo el código que necesites en tu constructor
  12.          // ...
  13.          // ...
  14.          // ...
  15.     }
  16.  
  17.     // Este método te devolverá siempre la misma instancia, así podrás acceder
  18.     // a sus datos desde cualquier parte de la aplicación
  19.     public static Censo getInstance()
  20.     {
  21.             if (instance == null) {
  22.                 // La primera vez que se llame a este método,
  23.                 // la instancia es nula por lo cual se crea por primera y única vez.
  24.                 instance = new Censo();
  25.             }
  26.             return instance; // Y devuelve siempre la misma instancia :)
  27.     }
  28. }
Y en la clase Clientes, modificar las siguientes líneas:
Código Java:
Ver original
  1. Censo cen = new Censo();
  2. Observacion ob = new Observacion();
por estas:
Código Java:
Ver original
  1. Censo cen = Censo.getInstance();
  2. Observacion ob = Censo.getInstance();
  #5 (permalink)  
Antiguo 11/03/2014, 21:17
 
Fecha de Ingreso: marzo-2014
Mensajes: 11
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Error al insertar datos en Access desde Netbeans

Hola farfamorA, estuve usando el Patrón Singleton, para así poder obtener los datos de los otros frames (se agregaron mas frames) y luego insertarlos en Access 2010. Este es el código del botón REGISTRAR:

private void registrarActionPerformed(java.awt.event.ActionEven t evt) {
Camed cam = Camed.getInstance(); //En cada frame tengo creado el metodo getInstance()
Acometida aco = Acometida.getInstance();
Materiales mat = Materiales.getInstance();


try
{
resultado = sentencia.executeQuery("INSERT INTO Clientes VALUES('"+supervisor.getText()+"',',"+FechaTrabaj.getDate()+",'"+TipoTrabajo.getSelectedItem()+"',"+codigo.ge tText()+",'"+cliente.getText()+"','"+direccion.get Text()+"','"+grupo.getText()+"',"+subgrupo.getText ()+","+NumEmpresas.getText()+",'"+serie.getText()+ "',"+FMult.getText()+","+HojaCP.getText()+",'"+tar ifa.getText()+"',"+lect.getText()+","+lec.EnergiaA .getText()+","+lec.EnergiaB.getText()+","+lec.Ener giaC.getText()+","+lec.DemandaA.getText()+","+lec. DemandaB.getText()+","+lec.DemandaC.getText()+","+ lec.ReactivoKv.getText()+",'"+SellosInstal.getText ()+"','"+SellosRet.getText()+"','"+cen.datosCenso. getText()+"',"+cen.KwhMes.getText()+","+cen.Tkw.ge tText()+",'"+nov.datosNovedades.getText()+"','"+co rrec.datosCorrectivos.getText()+"',"+cam.InsSerie. getText()+","+cam.InsEEMCA.getText()+","+cam.InsLe ctura.getText()+",'"+cam.TipoMed.getSelectedItem() +"','"+aco.TipoAcometida.getSelectedItem()+":"+aco .CantMts.getText()+":"+aco.egreso.getText()+"',"+a co.CantMts.getText()+","+aco.egreso.getText()+",'" +mat.datosMateriales.getText()+"','"+obser.datosOb servacion.getText()+"',)");

}
catch (SQLException c){
JOptionPane.showMessageDialog(null, "error :" + c.getMessage());
}
}


El problema es que al dar clic en el botón me sale error de: java.lang.NullPointerException. Yo para comprobar le puse un line breakpoint y pasaba el curso por cada uno de los jTextfield.getText() y alli si se veia el valor ingresado.
No entiendo cual es el valor nulo que toma de ese query.
Aunque tengo dudas con el FechaTrabaj.getDate() el cual lo tomo de un JDateChooser, ya que en Access tengo declarado ese campo como Fecha/Hora.
Otra duda, tendra que ver algo que este trabajando en una pc de 64 bits?

Gracias por la atención.
  #6 (permalink)  
Antiguo 12/03/2014, 09:26
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Error al insertar datos en Access desde Netbeans

Para empezar, tu código está muy desordenado.
Vamos por partes: para saber cual es el objeto que te está devolviendo null, lo más práctico que podrías hacer es:
Código Java:
Ver original
  1. System.out.println("Supervisor: " + supervisor.getText());
  2. System.out.println("FechaTrabaj: " + FechaTrabaj.getText());
  3. // Así con
  4. // todos los
  5. // campos
  6. System.out.println("datosObservacion: " + obser.datosObservacion.getText());
O también crear un String con la query dentro de él, e imprimirla en consola:
Código Java:
Ver original
  1. String query = "INSERT INTO Clientes VALUES('"+supervisor.getText()+ /* Toda la consulta aquí */ +obser.datosOb servacion.getText()+"',)");
  2. System.out.println(query);
  3. resultado = sentencia.executeQuery(query);
Así verás en donde es precisamente de donde viene ese valor nulo.

Por otro lado, asumo que has probado la conexión entre Access y tu aplicación, tal vez haciendo un simple "SELECT columna FROM tabla".
Si aún no tienes conectividad, debes empezar por ahí.
Debes crear una fuente de datos como explican acá:
http://chuwiki.chuidiang.org/index.p...ava_con_Access
Si tu PC es de 64bits, en el primer paso del tuto que te pasé, en vez de hacer esto:
Para ello, desde el menú de Inicio, vamos eligiendo las siguientes opciones (Windows XP, puede ser algo distinto en otras versiones de Windows): "Inicio" -> "Configuracion" -> "Panel de control" -> "Herramientas administrativas" -> "Orígenes de datos". Obtenemos la siguiente ventana.
Haces esto:
Para ello, ir a C:\Windows\SysWOW64 y ejecutar odbcad32.exe. Obtenemos la siguiente ventana.
El resto es igual.
  #7 (permalink)  
Antiguo 12/03/2014, 09:39
 
Fecha de Ingreso: marzo-2014
Mensajes: 11
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Error al insertar datos en Access desde Netbeans

Gracias por responder. Estuve revisando la conexión y cree de nuevo una BD con .mdb, y me funcionó la conexión.
Ahora el problema es que al dar REGISTRAR me sale:
"Error de sintaxis en la instrucción insert into"

No se si le falta algo al query:


resultado = sentencia.executeQuery("INSERT INTO Clientes (Supervisor,Electricistas,Unidad_asig,Tipo_trabajo ,Codigo,Cliente,Direccion,Grupo,Subgrupo,Num_empre sas,Serie,FMult,Hoja_CP,Tarifa,Lect_TKwh,KwhA,KwhB ,KwhC,KwA,KwB,KwC,Kvarh,Sellos_instal,Sellos_encon t,Censo,Total_Kwh_mes,Total_Kw,Novedades,Correctiv os,Medidor_serie,Medidor_eemca,Medidor_lectura,Tip o_medidor,Tipo_acometida,Cantidad,Egreso,Materiale s,Observacion)VALUES('"+supervisor.getText()+"','" +supervisor.getText()+"','"+supervisor.getText()+" ','"+TipoTrabajo.getSelectedItem()+"',"+codigo.get Text()+",'"+cliente.getText()+"','"+direccion.getT ext()+"','"+grupo.getText()+"',"+subgrupo.getText( )+","+NumEmpresas.getText()+",'"+serie.getText()+" ',"+FMult.getText()+","+HojaCP.getText()+",'"+tari fa.getText()+"',"+lect.getText()+","+lec.EnergiaA. getText()+","+lec.EnergiaB.getText()+","+lec.Energ iaC.getText()+","+lec.DemandaA.getText()+","+lec.D emandaB.getText()+","+lec.DemandaC.getText()+","+l ec.ReactivoKv.getText()+",'"+SellosInstal.getText( )+"','"+SellosRet.getText()+"','"+cen.datosCenso.g etText()+"',"+cen.KwhMes.getText()+","+cen.Tkw.get Text()+",'"+nov.datosNovedades.getText()+"','"+cor rec.datosCorrectivos.getText()+"',"+cam.InsSerie.g etText()+","+cam.InsEEMCA.getText()+","+cam.InsLec tura.getText()+",'"+cam.TipoMed.getSelectedItem()+ "','"+aco.TipoAcometida.getSelectedItem()+"',"+aco .CantMts.getText()+","+aco.egreso.getText()+",'"+m at.datosMateriales.getText()+"','"+obser.datosObse rvacion.getText()+"')");
  #8 (permalink)  
Antiguo 12/03/2014, 10:07
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Error al insertar datos en Access desde Netbeans

Así no se puede analizar una query, tú lo que nos estás dando es la cadena con valores concatenados.
Haz lo que te indiqué líneas arriba:
Código Java:
Ver original
  1. String query = "INSERT INTO Clientes VALUES('"+supervisor.getText()+ /* Toda la consulta aquí */ +obser.datosOb servacion.getText()+"',)");
  2. System.out.println(query); // ESTO TE IMPRIMIRÁ LA QUERY EN CONSOLA
  3. resultado = sentencia.executeQuery(query);

Lo que sale en consola lo copias acá.

Ejemplo de Query:
Código SQL:
Ver original
  1. INSERT INTO TABLA (ID, CODIGO) VALUES (1,'911');

Esto NO es una query (esto construye una query, okey, pero no soy la Java Virtual Machine para saber qué me arrojará esa concatenación de cadenas).
Código Java:
Ver original
  1. resultado = sentencia.executeQuery("INSERT INTO TABLA (ID, CODIGO) VALUES ("+campo.getText()+",'"+campo2.getText()+"');");
  #9 (permalink)  
Antiguo 12/03/2014, 10:22
 
Fecha de Ingreso: marzo-2014
Mensajes: 11
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Error al insertar datos en Access desde Netbeans

Ya lo hice, esto sale en System.out.println(query);

INSERT INTO Clientes (Supervisor,Electricistas,Unidad_asig,Tipo_trabajo ,Codigo,Cliente,Direccion,Grupo,Subgrupo,Num_empre sas,Serie,FMult,Hoja_CP,Tarifa,Lect_TKwh,KwhA,KwhB ,KwhC,KwA,KwB,KwC,Kvarh,Sellos_instal,Sellos_encon t,Censo,Total_Kwh_mes,Total_Kw,Novedades,Correctivos,Medidor_serie,Medidor_eemca ,Medidor_lectura,Tipo_medidor,Tipo_acometida,Canti dad,Egreso,Materiales,Observacion)

VALUES('Ing Juan C','Ing Juan C','Ing Juan C','Reconexión',1333,'CEDEÑO MILT','CDLA BELLAVISTA','1 - ESPECIAL: EMPLEADOS',50,12345,'909571 ',543,7777,'RD',8,1,4,6,2,5,7,3,'JU75,','ABCD2,',' licuadora:5, ',4,50,0,60,'TCP, ','CBS, CAC, CCD, CMC, ',1,2,4,'Medidor 240V bornera electrónico','Cable Cobre #8',1,2,'Fusible 15 amp:4:2, ','NO')

Al final hay un mensaje: el número de valores de consulta y el número de campos de destino son diferentes.
En el que tengo una duda porque en el campo total kwh mes y total kw son de tipo double y almacenan 4,50 y 0,60 pero pareciera que access lo toma por separado 4 50 0 y 60.
  #10 (permalink)  
Antiguo 12/03/2014, 10:43
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Error al insertar datos en Access desde Netbeans

Utiliza el separador decimal "." en vez del ",".
  #11 (permalink)  
Antiguo 12/03/2014, 11:03
 
Fecha de Ingreso: marzo-2014
Mensajes: 11
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Error al insertar datos en Access desde Netbeans

¡Ya se ingresan los datos!

Le aumenté y funcionó.

DecimalFormatSymbols simbolos = new DecimalFormatSymbols();
simbolos.setDecimalSeparator('.');
DecimalFormat formateador = new DecimalFormat("0.00",simbolos);

Solo que al final, y es raro me aparece: "error no resultset was produced"
Cierro la aplicación, voy a la BD pero si se inserta los datos.
  #12 (permalink)  
Antiguo 12/03/2014, 11:15
 
Fecha de Ingreso: marzo-2014
Mensajes: 11
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Error al insertar datos en Access desde Netbeans

Usé el executeUpdate, pero...."int cannot be converted to resultset"


String query = "INSERT INTO Clientes (Supervisor,Electricistas,Unidad_asig,Tipo_trabajo ,Codigo,Cliente,Direccion,Grupo,Subgrupo,Num_empre sas,Serie,FMult,Hoja_CP,Tarifa,Lect_TKwh,KwhA,KwhB ,KwhC,KwA,KwB,KwC,Kvarh,Sellos_instal,Sellos_encon t,Censo,Total_Kwh_mes,Total_Kw,Novedades,Correctiv os,Medidor_serie,Medidor_eemca,Medidor_lectura,Tip o_medidor,Tipo_acometida,Cantidad,Egreso,Materiale s,Observacion)VALUES('"+supervisor.getText()+"','" +supervisor.getText()+"','"+supervisor.getText()+" ','"+TipoTrabajo.getSelectedItem()+"',"+codigo.get Text()+",'"+cliente.getText()+"','"+direccion.getT ext()+"','"+grupo.getText()+"',"+subgrupo.getText( )+","+NumEmpresas.getText()+",'"+serie.getText()+" ',"+FMult.getText()+","+HojaCP.getText()+",'"+tari fa.getText()+"',"+lect.getText()+","+lec.EnergiaA. getText()+","+lec.EnergiaB.getText()+","+lec.Energ iaC.getText()+","+lec.DemandaA.getText()+","+lec.D emandaB.getText()+","+lec.DemandaC.getText()+","+l ec.ReactivoKv.getText()+",'"+SellosInstal.getText( )+"','"+SellosRet.getText()+"','"+cen.datosCenso.g etText()+"',"+cen.KwhMes.getText()+","+cen.Tkw.get Text()+",'"+nov.datosNovedades.getText()+"','"+cor rec.datosCorrectivos.getText()+"',"+cam.InsSerie.g etText()+","+cam.InsEEMCA.getText()+","+cam.InsLec tura.getText()+",'"+cam.TipoMed.getSelectedItem()+ "','"+aco.TipoAcometida.getSelectedItem()+"',"+aco .CantMts.getText()+","+aco.egreso.getText()+",'"+m at.datosMateriales.getText()+"','"+obser.datosObse rvacion.getText()+"')";

System.out.println(query);

resultado = sentencia.executeUpdate(query);
  #13 (permalink)  
Antiguo 12/03/2014, 12:12
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Error al insertar datos en Access desde Netbeans

No somos adivinos.
¿Qué tipo de dato es resultado? ¿Es un Resulset?
¿Qué tipo de dato es sentencia? ¿Es un Statement? ¿Un PreparedStatement?
  #14 (permalink)  
Antiguo 12/03/2014, 12:37
 
Fecha de Ingreso: marzo-2014
Mensajes: 11
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Error al insertar datos en Access desde Netbeans

Sí, es resultset. Pero ya solucioné el problema.
No habia que poner ese "resultado" alli, sino directamente:

sentencia.executeUpdate(query);


Gracias.

Etiquetas: access, netbeans
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 00:10.