FoxPro/Visual FoxPro - Unir 2 consultas y mostrarlas en un Solo GRID

 
Vista:

Unir 2 consultas y mostrarlas en un Solo GRID

Publicado por Abraham AG (13 intervenciones) el 26/05/2011 01:02:55
Hola que tal amigos,

Recurro una vez mas a su basta sabiduría en Foxpro para ver si me pueden ayudar una vez más, pues verán tengo las siguientes dudas.

1.- Tengo en un botón 2 consultas diferentes para extraer información y desplegar la en un GRID diferente cada consulta, los códigos son los siguientes:

SELECT Recamiones.ton FROM Recamiones WHERE YEAR(Recamiones.date) = 2009 .AND. MONTH(Recamiones.date) = 5 INTO CURSOR Ctoneladas READWRITE
SELECT Regondolas.ton FROM Regondolas WHERE YEAR(Regondolas.date) = 2009 .AND. MONTH(Regondolas.date) = 5 INTO CURSOR Gtoneladas READWRITE
Thisform.Grid1.RecordSource='toneladas'
Thisform.Grid2.RecordSource='toneladas2'
Thisform.Refresh

Bueno mi duda al respecto de esto es que si es posible que esas 2 consultas se puedan poner en 1 sola, eh estado intentando con el INNER JOIN pero no lo logro, trate llamando directamente los campos desde las tablas y tampoco me fue posible, no soy un usuario muy experimentado así que me eh estado atorando mucho con esto.

2.- Como pueden ver en ambas consultas se encuentra la siguiente linea de código:

WHERE YEAR(Recamiones.date) = 2009 .AND. MONTH(Recamiones.date) = 5
WHERE YEAR(Regondolas.date) = 2009 .AND. MONTH(Regondolas.date) = 5

Esto es por que en mis tablas tengo miles de campos, entonces para agilizar el proceso de las consultas planeo separar por rangos de meses-año, osea por ejemplo todos los campos de enero del 2009, probando con valores estáticos (como se aprecia en el código) funciona correctamente, bueno el plan original es que esos datos se tomen de 2 combobox, que seria uno para el mes del 1 al 12 y otro para los años, una vez que agrego los valores a los combos y lo ejecuto, me lanza un error de tipo Mismatch (que los tipos de datos no coinciden), pero no lo entiendo ya que no le veo la diferencia entre poner el valor estático y que se cambie a través del value del Combo, el código lo coloco de la siguiente manera, no se si tenga algún error:

WHERE YEAR(Recamiones.date) = Thisform.CCaño.Value .AND. MONTH(Recamiones.date) = Thisform.CCmeses.Value

WHERE YEAR(Regondolas.date) = Thisform.CCaño.Value.AND. MONTH(Regondolas.date) = Thisform.CCmeses.Value.

En lo que yo veo no ahí error, solo se me ocurre que la propiedad value no coincide con el tipo de dato, pero si no es asi, que tipo de dato le tengo que poner :S
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauricio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Unir 2 consultas y mostrarlas en un Solo GRID

Publicado por Mauricio (1541 intervenciones) el 26/05/2011 01:54:02
Si se pueden unir las 2 tablas, pero tendrias que modificar tu GRID y tampoco sabrias si es de Recamiones o Regondolas, pero aca te doy el codigo:
SELECT A.tone FROM recamiones A, regondolas B WHERE (YEAR(A.date) = 2011 AND MONTH(A.date) = 5) ;
AND (YEAR(B.date) = 2011 AND MONTH(B.date) = 5) INTO CURSOR CToneGondo
******************************
** En cuanto al problema de los combobox definitivamente los valores que tomas de los combobox no son numericios, son CHAR por eso el error que te da, pero eso tiene solucion usando VAL e INT.
*****
WHERE YEAR(Recamiones.date) = INT(VAL(Thisform.CCaño.value)) AND MONTH(Recamiones.date) = INT(VAL(Thisform.CCmeses.Value))
Claro tienes que moditicar tu GRID antes y luego la sentencia SQL.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Unir 2 consultas y mostrarlas en un Solo GRID

Publicado por Angel Ricardo Piedrabuena (87 intervenciones) el 26/05/2011 13:16:49
Hola Abraham.
Como las tablas deben tener (o deberian tener) un campo comun que las relacione, es decir IdCamión (que identificaria al camion) o IdProducto (que identificaria el producto) el SELECT quedaria de la siguiente forma ( Tomo como ejemplo el supuesto que el campo en comun es IdProducto)

SELECT Recamiones.ton , Regondolas.ton FROM Recamiones, Regondolas WHERE YEAR(Recamiones.date) = 2009 .AND. MONTH(Recamiones.date) = 5 .AND. Recamiones.IdProductos = Rgondolas.IdProducto INTO CURSOR Camion_y_gondola READWRITE


Espero sea de tu ayuda

saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Unir 2 consultas y mostrarlas en un Solo GRID

Publicado por Mauricio (1541 intervenciones) el 26/05/2011 17:00:23
SELECT A.tone FROM recamiones A, regondolas B WHERE (YEAR(A.date) = 2011 AND MONTH(B.date) = 5) ;
AND (YEAR(A.date) = 2011 AND MONTH(B.date) = 5) INTO CURSOR CToneGondo
Disculpa, correccion de query
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Unir 2 consultas y mostrarlas en un Solo GRID

Publicado por Abraham AG (13 intervenciones) el 26/05/2011 06:49:48
Hola,

Amigo gracias por tu respuesta, me ayudaste mucho, pero la verdad no entiendo que quieres decir con "tendrás que modificar tu GRID y tampoco sabrias si es de Recamiones o Regondolas", veras en lo segundo quizás no importe porque a fin de cuentas lo único que voy a necesitar será la suma total por mes de las 2 tablas (osea regondolas.ton + recamiones.ton) , el problema principal sera que me acepte el uso de los filtros a través de los combobox.

Aún así no entiendo que me quisiste decir con lo primero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Unir 2 consultas y mostrarlas en un Solo GRID

Publicado por d4n1h3lp (1 intervención) el 09/06/2011 00:19:16
por si aun te interesa la respuesta, yo tengo algo similar a lo que tu deseas, el problema con el combobox es que es combo(textx+num) y tienes q especificarle q tipo de dato vas a tomar, para eso usa el VAL, pero si solo deseas que se visualize la suma de todo una tabla q tenga ciertos parametros io te dejo unas lineas q uso para ese tipo de casos:

supongamos que quiero filtrar precios por meses primero filtro los meses

if thisform.combo1.value="ENERO" then
valor_a_comparar=1
endif

set filter to MONTH(nombre_tabla.nombre_campo) = valor_a_comparar
SUM VAL(monto_num) TO _canti ------>esto es para sumar un campo siempre q cumpla el filtro
thisform.text1.Value = _canti ------>esto es para dar la respuesta en un text
go top ------>para ir al ultimo registro
thisform.refresh ------>para refrescar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar