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

Funcion Suma en Java para la consulta a bd(access)

Estas en el tema de Funcion Suma en Java para la consulta a bd(access) en el foro de Java en Foros del Web. Mis estimados muy buenos dias, Tengo un problema en la manipulacion de la funcion suma, el cual me imprime 0. Esto uso: 1. en mi ...
  #1 (permalink)  
Antiguo 15/11/2010, 04:45
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Pregunta Funcion Suma en Java para la consulta a bd(access)

Mis estimados muy buenos dias,

Tengo un problema en la manipulacion de la funcion suma, el cual me imprime 0. Esto uso:

1. en mi bd (access) la tabla Pago del campo a sumar es montopago y es de tipo de dato numero

2. uso el ide (netbeans) y mi conexion a bd es:

try
{
s6=c.createStatement(ResultSet.TYPE_SCROLL_INSENSI TIVE,ResultSet.CONCUR_UPDATABLE);
r6=s6.executeQuery("SELECT SUM(montopago) as sumapagos FROM Pago");
System.out.println("SQL6 A BD...OK");
System.out.println("Sum of pays: "+sumapagos);
}

3. esto me imprime en consola:

SQL6 A BD...OK
Sum of pays: 0BUILD SUCCESSFUL (total time: 55 seconds)

Porque imprime la suma de pagos (Sum of pays) = 0 ???

Agradesco de antemano sus sugerencias.
  #2 (permalink)  
Antiguo 15/11/2010, 09:07
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Por favor si alguien podria ayudarme, se los agradesco de antemano...
  #3 (permalink)  
Antiguo 15/11/2010, 15:21
Avatar de LordJhony  
Fecha de Ingreso: septiembre-2010
Mensajes: 472
Antigüedad: 13 años, 7 meses
Puntos: 24
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Creo que tu problema esta aca.
Tu tienes
Código Java:
Ver original
  1. System.out.println("Sum of pays: "+sumapagos);
Y deberias tener
Código Java:
Ver original
  1. System.out.println("Sum of pays: "+r6);
Ya que es la variable que esta opteniendo el valor de tu consulta a la base de datos
  #4 (permalink)  
Antiguo 16/11/2010, 08:11
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Mi estimado LordJhony:

Tu sugerencia no es el correcto, probe y esto me imprime en la consola:

System.out.println("Sum of pays: "+r6);
==>Sum of pays: sun.jdbc.odbc.JdbcOdbcResultSet@117a8bd


Tendran otra sugerencia por favor.
  #5 (permalink)  
Antiguo 16/11/2010, 10:10
Avatar de LordJhony  
Fecha de Ingreso: septiembre-2010
Mensajes: 472
Antigüedad: 13 años, 7 meses
Puntos: 24
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Podrias subir todo el codigo para mirarlo mejor.
Eso si recuerda usar las etiquetas de codigo para ser mas entendible
  #6 (permalink)  
Antiguo 16/11/2010, 10:57
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Prueba con:
System.out.println( "Sum of pays: " + r6.getInt(1) );

El código q pusiste en el primer post ni siquiera debería compilar, nunca declaras la variable 'sumapagos'.
Para Java la cadena
"SELECT SUM(montopago) as sumapagos FROM Pago"
es solo eso, un String.

slds;
  #7 (permalink)  
Antiguo 16/11/2010, 12:26
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Funcion Suma en Java para la consulta a bd(access)

nup_:

Probe con lo me indicaste:

r6=s6.executeQuery("SELECT SUM(monpago) AS sumapagos FROM Pago");
System.out.println("SQL6 A BD...OK");
System.out.println("Sum of pays: "+r6.getInt(1));

Me sale este error:
SQL6 A BD...INCORRECTOjava.sql.SQLException: [Microsoft][Administrador de controladores ODBC] Estado del cursor no válido


Saludos,
  #8 (permalink)  
Antiguo 16/11/2010, 13:40
 
Fecha de Ingreso: noviembre-2010
Mensajes: 16
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Funcion Suma en Java para la consulta a bd(access)

¿r6 es un ResultSet?

si fuera asi tendrias que avanzarlo a su primer registro:

Código:
r6.next()


Código:
r6=s6.executeQuery("SELECT SUM(monpago) AS sumapagos FROM Pago");

while(r6.next()){
	System.out.println("SQL6 A BD...OK");
	System.out.println("Sum of pays: "+ r6.getString("sumapagos"));
}
si se que lo puse en un siclo, pero como la consulta solo te arroja 1 resultado no importa, pasara una pura ves, aunque si quieres en ves del while ocupa un if.

espero que te sirva.
  #9 (permalink)  
Antiguo 16/11/2010, 15:07
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Hola datronplas:

Hice lo que me indicaste

r6=s6.executeQuery("SELECT SUM(monpago) AS sumapagos,estpago,feccrepago FROM Pago WHERE estpago = '1' AND FORMAT(feccrepago,'ddmmyyyy') = "+fechaok+"");
System.out.println("SQL6 A BD...OK");
if(r6.next())
{
System.out.println("Sum of pays: "+ r6.getString("sumapagos"));
}


<-> estpago = estado del registro (0:inactivo 1:activo), feccrepago = fecha de creacion del registro

, pero me sale este error

SQL6 A BD...INCORRECTOjava.sql.SQLException: [Microsoft][Controlador ODBC Microsoft Access] Ha intentado ejecutar una consulta que no incluye la expresión especificada 'estpago' como parte de una función de agregado.


Gracias de antemano
  #10 (permalink)  
Antiguo 16/11/2010, 15:38
 
Fecha de Ingreso: noviembre-2010
Mensajes: 16
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Cita:
Iniciado por hoberwilly Ver Mensaje
Hola datronplas:

Hice lo que me indicaste

r6=s6.executeQuery("SELECT SUM(monpago) AS sumapagos,estpago,feccrepago FROM Pago WHERE estpago = '1' AND FORMAT(feccrepago,'ddmmyyyy') = "+fechaok+"");
System.out.println("SQL6 A BD...OK");
if(r6.next())
{
System.out.println("Sum of pays: "+ r6.getString("sumapagos"));
}


<-> estpago = estado del registro (0:inactivo 1:activo), feccrepago = fecha de creacion del registro

, pero me sale este error

SQL6 A BD...INCORRECTOjava.sql.SQLException: [Microsoft][Controlador ODBC Microsoft Access] Ha intentado ejecutar una consulta que no incluye la expresión especificada 'estpago' como parte de una función de agregado.


Gracias de antemano
Es problema de la consulta que estas haciendo, si consultas en varias tablas tienes que poner nombretabla.nombrecampo y no solo el nombrecampo como lo estas haciendo.
  #11 (permalink)  
Antiguo 16/11/2010, 15:59
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Datronplas:

Pero solo consulto en una tabla:

SELECT SUM(monpago) AS sumapagos,estpago,feccrepago FROM Pago WHERE...
  #12 (permalink)  
Antiguo 16/11/2010, 16:08
 
Fecha de Ingreso: noviembre-2010
Mensajes: 16
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Funcion Suma en Java para la consulta a bd(access)

disculpa lei mal, intenta hacer una consulta simple para descartar que sea la consulta.

ejemplo:

SELECT SUM(monpago) AS sumapagos FROM Pago
  #13 (permalink)  
Antiguo 16/11/2010, 16:26
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Datronplas,

Trabajando con una simple consulta funciona ok:

r6=s6.executeQuery("SELECT SUM(monpago) AS sumapagos FROM Pago);
System.out.println("SQL6 A BD...OK");
if(r6.next())
{
System.out.println("Sum of pays: "+ r6.getString("sumapagos"));
}


Pero lastimosamente yo requiero trabajarlo asi:

r6=s6.executeQuery("SELECT SUM(monpago) AS sumapagos,estpago,feccrepago FROM Pago WHERE estpago = '1' AND FORMAT(feccrepago,'ddmmyyyy') = "+fechaok+"");
System.out.println("SQL6 A BD...OK");
if(r6.next())
{
System.out.println("Sum of pays: "+ r6.getString("sumapagos"));
}

Porque me sale el error:

SQL6 A BD...INCORRECTOjava.sql.SQLException: [Microsoft][Controlador ODBC Microsoft Access] Ha intentado ejecutar una consulta que no incluye la expresión especificada 'estpago' como parte de una función de agregado.



Gracias de antemano.
  #14 (permalink)  
Antiguo 16/11/2010, 16:55
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Evidentemente

Cita:
SELECT SUM(monpago) AS sumapagos FROM Pago
no es

Cita:
SELECT SUM(monpago) AS sumapagos,estpago,feccrepago FROM Pago WHERE estpago = '1' AND FORMAT(feccrepago,'ddmmyyyy') = "+fechaok+""
Esa SQL está mal construida

http://www.w3schools.com/sql/sql_groupby.asp

Antes de hacer desde Java una consulta, asegúrate de que la sentencia es correcta ejecutándola directamente en una BBDD.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #15 (permalink)  
Antiguo 16/11/2010, 18:17
 
Fecha de Ingreso: noviembre-2010
Mensajes: 16
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Funcion Suma en Java para la consulta a bd(access)

bueno ya sabemos que es la consuta, ahora cenrtate en que parte estas mal.

yo intentaria fragmentar la consulta para probar donde esta el problema.


Opcion 1:

Código:
SELECT SUM(monpago) AS sumapagos FROM Pago
Opcion 2:

Código:
SELECT SUM(monpago) AS sumapagos,estpago,feccrepago FROM Pago
WHERE estpago = '1'
si la segunda opcion falla intentaria sacarle la comilla simple -> ' a la consulta

Código:
SELECT SUM(monpago) AS sumapagos,estpago,feccrepago FROM Pago WHERE estpago = 1
Opcion 3:

Código:
SELECT SUM(monpago) AS sumapagos,estpago,feccrepago FROM Pago
WHERE  FORMAT(feccrepago,'ddmmyyyy') = "+fechaok+""
si pudieras anotar los campos de la tabla y sus tipos de datos, podria ayudarte mas.

tambien quisiera saber como esta almacenada la informacion en el campo feccrepago.
  #16 (permalink)  
Antiguo 16/11/2010, 19:58
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Mi tabla: Pago

campos
codpago(autoincremetal,6)
codpropietario(string)
monpago(moneda)
estpago(string,1)
feccrepago(fecha/hora, yyyy-mm-dd hh:mm:ss)


Saludos,
  #17 (permalink)  
Antiguo 17/11/2010, 02:56
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Cita:
Iniciado por datronplas
si la segunda opcion falla intentaria sacarle la comilla simple -> ' a la consulta
No, el problema lo tiene en que no se puede usar un SUM en una SELECT de varios campos sin usar GROUP BY.

A veces es recomendable leer los enlaces que pone la gente.

Juego de las diferencias

http://www.w3schools.com/sql/sql_func_sum.asp

Vs

http://www.w3schools.com/sql/sql_groupby.asp
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #18 (permalink)  
Antiguo 17/11/2010, 07:51
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Xerelo te agradesco:

Lei el link y se supero ese error
*******************************************
GROUP BY More Than One Column

We can also use the GROUP BY statement on more than one column, like this:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate
*******************************************

Ahora mi trabajo es poder imprimirlo esa SUMATOTAL, lo trabaje de esta manera y no me funca:

r6=s6.executeQuery("SELECT estpago,feccrepago,SUM(monpago) AS sumapagos FROM Pago WHERE estpago = '1' AND FORMAT(feccrepago,'ddmmyyyy') = "+fechaok+" GROUP BY codpago,estpago,feccrepago,monpago");
System.out.println("SQL6 A BD...OK");
while(r6.next())
{
System.out.println("Sum of pays: "+ r6.getString("sumapagos"));
}

esto me imprime:

SQL66 A BD...OK
Sum of pays: 35.0
Sum of pays: 1.0
Sum of pays: 1.0
Sum of pays: 38.0
Sum of pays: 38.0
Sum of pays: 41.0
Sum of pays: 12.0

Pero se requiere imprimir la sumatotal=166


Gracias de antemano
  #19 (permalink)  
Antiguo 17/11/2010, 09:15
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Cita:
*******************************************
GROUP BY More Than One Column

We can also use the GROUP BY statement on more than one column, like this:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate
*******************************************
Si te fijas, el campo que pretendes sumar, no se agrupa.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #20 (permalink)  
Antiguo 17/11/2010, 10:15
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Xerelo,

Ajuste el codigo segun lo indicado:

r6=s6.executeQuery("SELECT estpago,feccrepago,SUM(monpago) AS sumapagos FROM Pago WHERE estpago = '1' AND FORMAT(feccrepago,'ddmmyyyy') = "+fechaok+" GROUP BY estpago,feccrepago");
System.out.println("SQL6 A BD...OK");
while(r6.next())
{
System.out.println("Sum of pays: "+ r6.getInt("sumapagos"));
}

Y esto me imprime en consola:

SQL66 A BD...OK
Sum of pays: 35
Sum of pays: 1
Sum of pays: 1
Sum of pays: 38
Sum of pays: 79
Sum of pays: 12



Saludos,
  #21 (permalink)  
Antiguo 17/11/2010, 10:48
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Funcion Suma en Java para la consulta a bd(access)

¿Y?

Seguramente tienes 6 tipos distintos de feccrepago, y hace lo que se espera, sacar la suma de los registros agrupados por estpago y feccpago.

Si no quieres que haga grupos por feccpago, no lo agregues al group by.

Y repito, prueba las SQL directamente en la BBDD para ver que son correctas, así podrás ver el resultado e intuir donde puede estar el problema, así no tendrás que depender de que otros te lo resuelvan.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #22 (permalink)  
Antiguo 17/11/2010, 11:27
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Funcion Suma en Java para la consulta a bd(access)

Xerelo,

Primeramente agradecerles por el tiempo que dedican en el foro para ofrecernos su apoyo desinteresado, la verdad que mi intencion no iba para nada en que realizen nuestro trabajo, la experiencia que tienen lo han ganado con el transcurrir del tiempo.

Bueno al tema dejo la solucion si alguna persona la necesita o interesa:

Mi tabla: Pago
Campos:
codpago(autoincremetal,6)
codpropietario(string)
monpago(moneda)
estpago(string,1)
feccrepago(fecha/hora, yyyy-mm-dd hh:mm:ss) ***aqui usare en el SQL --> FORMAT***

Codigo:

r6=s6.executeQuery("SELECT estpago,FORMAT(feccrepago,'ddmmyyyy'),SUM(monpago) AS sumapagos FROM Pago WHERE estpago = '1' AND FORMAT(feccrepago,'ddmmyyyy') = "+fechaok+" GROUP BY estpago,FORMAT(feccrepago,'ddmmyyyy')");
System.out.println("SQL6 A BD...OK");
if(r6.next())
{
System.out.println("Sum of pays: "+ r6.getInt("sumapagos"));
}

Impresion en consola:

SQL6 A BD...OK
Sum of pays: 166

Resultado: Ok


Gracias a todos, y en especial a LordJhony, nup_, datronplas, Xerelo.

Etiquetas: funcion, suma
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 16:58.