Graficar resultados de una tabla
Hola necesito su ayuda para graficar resultados de una tabla en una form
1 Respuesta
Respuesta de Alonso Jarrín Solís
1
1
He construido un ejemplo en el que muestra cómo graficar los resultados de una tabla, le recomiendo que lo ejecute desde el depurador de Visual FoxPro paso a paso para que vea y pueda entender los pasos a seguir para graficar los resultados. ¿Me podría regalar su correo electrónico para enviárselo?
Como corro el depurador de Visual FoxPro
Que hace el proceso Destroy
Que es el Parameters lcIsRunMain
Que hace el proceso Destroy
Que es el Parameters lcIsRunMain
El depurador de Visual FoxPro lo corres de la siguiente manera: En el menú herramientas selecciona Depurador luego en el depurador haces click en botón ejecutar, temuestra el cuadro de diálogo de abrir y en el directorio del ejemplo seleccionas el archivo main. Prg y luego en la barra de herramientas del depurador buscas el botón paso a paso y haces clic en él, por cada vez que hagas clic en este botón el ejemplo del gráfico se ejecuta lentamente línea por línea.
El parámetro lcIsRunmain lo que hace es verificar si has ejecutado el programa principal del ejemplo del gráfico, si el parámetro es verdadero se ejecutará el formulario frmgraph de lo contrario el programa se cancela.
El procedimiento destroy lo que hace liberar de memoria cualquier formulario o control cargado en memoria y si mal no estoy en el procedimiento destroy del formulario coloqué código que cierra el cursor al que está enlazado el gráfico.
Cualquier inquietud no dudes en escribirme.
El parámetro lcIsRunmain lo que hace es verificar si has ejecutado el programa principal del ejemplo del gráfico, si el parámetro es verdadero se ejecutará el formulario frmgraph de lo contrario el programa se cancela.
El procedimiento destroy lo que hace liberar de memoria cualquier formulario o control cargado en memoria y si mal no estoy en el procedimiento destroy del formulario coloqué código que cierra el cursor al que está enlazado el gráfico.
Cualquier inquietud no dudes en escribirme.
Ok la verdad si tengo muchos problemas espero me puedas ayudar a un ejemplo más sencillo por ejemplo tengo mi base de datos entonces mi idea es:
Use tabla
a=reccount()
thisform.text1.value=(SUM(precio))/a
use tabla2
a=reccount()
thisform.text2.value=(SUM(precio))/a
use tabla2
a=reccount()
thisform.text3.value=(SUM(precio))/a
y grafique thisform.text1.value,thisform.text2.value y thisform.text3.value
Espero me puedas ayudar y de antemano muchas gracias por tu tiempo y apoyo
Use tabla
a=reccount()
thisform.text1.value=(SUM(precio))/a
use tabla2
a=reccount()
thisform.text2.value=(SUM(precio))/a
use tabla2
a=reccount()
thisform.text3.value=(SUM(precio))/a
y grafique thisform.text1.value,thisform.text2.value y thisform.text3.value
Espero me puedas ayudar y de antemano muchas gracias por tu tiempo y apoyo
De acuerdo, te enviaré unos pasos a seguir para que soluciones tu problema con los datos que escribiste.
Te responderé pronto...
Te responderé pronto...
Para comenzar crea en tu base de datos una tabla llamada gráficos con un campo de tipo general que se llame Cod_grf.
Ahora abre Microsoft Excel e inserta un gráfico en una hoja de cálculo, luego selecciona el gráfico haz clic derecho sobre el mismo, dale copiar, luego ve a la tabla gráficos que te dije que crearas, abre el campo general cod_grf haz clic derecho sobre el área y dale pegar esta acción pegará el gráfico creeado en Excel (En visual FoxPro es posible insertar un gráfico pero es un poco más dispendioso de explicar).
Luego agrega la tabla gráficos al entorno de datos del formulario al que agregaste el objeto OleBoundcontrol y establece la propiedad Controlsource del objeto Oleboundcontrol con el valor "Gráficos.cod_grf".
Luego agrega la tabla gráficos al entorno de datos del formulario al que agregaste el objeto OleBoundcontrol y establece la propiedad Controlsource del objeto Oleboundcontrol con el valor "Gráficos.cod_grf".
Eso depende de las variables que lleve el gráfico, cosa que discutiremos luego, ahora en la ficha otros de tu proyecto selecciona archivos de texto y crea un archivo llamado Gráficos. H y le pegas el siguiente código:
#Define CRLF CHR(13)+CHR(10)
#Define TAB CHR(9)
#Define AREA 1
#Define BARS 2
#Define COLUMNS 3
#Define LINES 4
#Define PIE 5
#Define RADAR -4151
#Define POINTXY -4169
#Define AREA3D -4098
#Define BAR3D -4099
#Define COLUMN3D -4100
#Define LINES3D -4101
#Define PIE3D -4102
#Define RUSK -4120
Nota: La cláusula Define debe ir en mayúsculas la puse en minúsculas porque este editor me reportó error.
#Define CRLF CHR(13)+CHR(10)
#Define TAB CHR(9)
#Define AREA 1
#Define BARS 2
#Define COLUMNS 3
#Define LINES 4
#Define PIE 5
#Define RADAR -4151
#Define POINTXY -4169
#Define AREA3D -4098
#Define BAR3D -4099
#Define COLUMN3D -4100
#Define LINES3D -4101
#Define PIE3D -4102
#Define RUSK -4120
Nota: La cláusula Define debe ir en mayúsculas la puse en minúsculas porque este editor me reportó error.
Ahora abre el formulario donde insertaste el objeto Oleboundcontrol, selecciona este mismo objeto y establece su propiedad Name con valor Graph1, luego ubicate en el menú formulario y haz clic en incluir archivo, te aparece un cuadro de diálogo que dice incluir archivo busca el archivo Gráficos. H selecciónalo y haz clic en aceptar.
Luego agrega un control Combobox, establece la propiedad RowSourceType con valor de 1 y la propiedad Style a 2 (Lista desplegable).
Luego agrega un control Combobox, establece la propiedad RowSourceType con valor de 1 y la propiedad Style a 2 (Lista desplegable).
En el evento InteractiveChange del control combobox pega el siguiente código:
With Thisform
Do Case
Case Alltrim(This.Value) == "Área"
.Graph1.Autoformat(AREA, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Barras"
.Graph1.Autoformat(BARS, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Columnas"
.Graph1.Autoformat(COLUMNS, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Lineas"
.Graph1.Autoformat(LINES, 4)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Pastel"
.Graph1.Autoformat(PIE, 6)
If !.Graph1.HasLegend
.Graph1.HasLegend = .T.
Endif
Case Alltrim(This.Value) == "Puntos XY"
.Graph1.Autoformat(POINTXY, 2)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Radar"
.Graph1.Autoformat(RADAR, 4)
If .Graph1.Hastitle = .T.
.Graph1.Hastitle = .F.
Endif
Case Alltrim(This.Value) == "Área 3D"
.Graph1.Autoformat(AREA3D, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Barras 3D"
.Graph1.Autoformat(BAR3D, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Columnas 3D"
.Graph1.Autoformat(COLUMN3D, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Pastel 3D"
.Graph1.Autoformat(PIE3D, 6)
If .Graph1.HasLegend = .F.
.Graph1.HasLegend = .T.
Endif
Case Alltrim(This.Value) == "Líneas 3D"
.Graph1.Autoformat(LINES3D, 2)
.Graph1.HasAxis(3) = .F.
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Rosca"
.Graph1.Autoformat(RUSK, 6)
If !.Graph1.HasLegend
.Graph1.HasLegend = .T.
Endif
Endcase
EndWith
With Thisform
Do Case
Case Alltrim(This.Value) == "Área"
.Graph1.Autoformat(AREA, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Barras"
.Graph1.Autoformat(BARS, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Columnas"
.Graph1.Autoformat(COLUMNS, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Lineas"
.Graph1.Autoformat(LINES, 4)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Pastel"
.Graph1.Autoformat(PIE, 6)
If !.Graph1.HasLegend
.Graph1.HasLegend = .T.
Endif
Case Alltrim(This.Value) == "Puntos XY"
.Graph1.Autoformat(POINTXY, 2)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Radar"
.Graph1.Autoformat(RADAR, 4)
If .Graph1.Hastitle = .T.
.Graph1.Hastitle = .F.
Endif
Case Alltrim(This.Value) == "Área 3D"
.Graph1.Autoformat(AREA3D, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Barras 3D"
.Graph1.Autoformat(BAR3D, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Columnas 3D"
.Graph1.Autoformat(COLUMN3D, 1)
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Pastel 3D"
.Graph1.Autoformat(PIE3D, 6)
If .Graph1.HasLegend = .F.
.Graph1.HasLegend = .T.
Endif
Case Alltrim(This.Value) == "Líneas 3D"
.Graph1.Autoformat(LINES3D, 2)
.Graph1.HasAxis(3) = .F.
If .Graph1.HasLegend
.Graph1.HasLegend = .F.
Endif
Case Alltrim(This.Value) == "Rosca"
.Graph1.Autoformat(RUSK, 6)
If !.Graph1.HasLegend
.Graph1.HasLegend = .T.
Endif
Endcase
EndWith
Establece la propiedad RowSourceType del control Combobox a 1 y escribe los siguientes valores en la propiedad Rowsource: Área, Barras, Columnas, Lineas, Pastel, Puntos XY, Radar, Área 3D, Barras 3D, Columnas 3D, Pastel 3D, Líneas 3D, Rosca
Luego de hacer esto, por favor envíame los valores que deseas graficar y qué representan cada valor ejemplo vamos a graficar las ventas de los meses de enero, febrero y marzo, entonces me describirías de la siguiente manera: Enero: 300000, febrero: 50000, marzo: 40000.
Todo lo anterior es para armar el algoritmo para graficar los valores.
Luego de hacer esto, por favor envíame los valores que deseas graficar y qué representan cada valor ejemplo vamos a graficar las ventas de los meses de enero, febrero y marzo, entonces me describirías de la siguiente manera: Enero: 300000, febrero: 50000, marzo: 40000.
Todo lo anterior es para armar el algoritmo para graficar los valores.
Bueno los datos los tengo en una tabla con varios cuadros de texto por ejemplo text1. value jalo la informacion de la tabla, ya la tengo en los cuadros de texto los datos y quiero que esos datos se grafiquen
De acuerdo, ya entiendo, posiblemente esos datos corresponden a cada registro de la tabla, si es así, entonces dime cuantos cuadros de textos son para poder determinar cuantas columnas o variables hay que graficar, y qué representa cada valor, o en su defecto envíame una imagen en jpg de ese formulario para ver los cuadros de texto y así poder determinar el algoritmo para crear el gráfico.
Mira lo que se quiere graficar es el rendimiento de los operadores, ahorita son 9 pero después pueden entrar más.
Entonces lo que entiendo es primero hay que hacer una consulta para el gráfico.
¿Puedes enviarme una copia de ese formulario y la tablas de los datos de los que deseas graficar?
¿Puedes enviarme una copia de ese formulario y la tablas de los datos de los que deseas graficar?
Entonces mientras tanto agrega un método al formulario que se llame graficar, te enviaré un código de ejemplo para que lo apliques al problema.
Disculpa por no haber contestado, no había podido ingresar a la página en esto días devino a que presentaba errores, se me había olvidado decirte algo, en el evento init del formulario escribe las siguientes líneas de comando:
Local lcDatos
lcDatos = "Enero" + TAB + "Febrero" + TAB + "Marzo" + CRLF;
+ TAB + "25000" + TAB + "50000" + TAB + "75000"
Set Multilocks On
=CursorSetProp("Buffering", 5, "Graficos")
Thisform. Graficar(lcDatos)
Nota: lcDatos es la estructura de datos que se enviará al evento graficar para que lo inserte en la hoja de datos del gráfico, si estás aprendiendo entonces en el formulario crea tres cuadros de texto para armar una estructura de datos personalizada al evento graficar, supongamos que el cuadro Text1 representa las ventas de enero, Text2 las ventas de Febrero y Text3 las ventas de marzo.
Luego crea un botón que diga graficar.
Local lcDatos
lcDatos = "Enero" + TAB + "Febrero" + TAB + "Marzo" + CRLF;
+ TAB + "25000" + TAB + "50000" + TAB + "75000"
Set Multilocks On
=CursorSetProp("Buffering", 5, "Graficos")
Thisform. Graficar(lcDatos)
Nota: lcDatos es la estructura de datos que se enviará al evento graficar para que lo inserte en la hoja de datos del gráfico, si estás aprendiendo entonces en el formulario crea tres cuadros de texto para armar una estructura de datos personalizada al evento graficar, supongamos que el cuadro Text1 representa las ventas de enero, Text2 las ventas de Febrero y Text3 las ventas de marzo.
Luego crea un botón que diga graficar.
En el evento click del botón graficar escribe el siguiente código:
Local lcDatos
lcDatos = "Enero" + TAB + "Febrero" + TAB + "Marzo" + CRLF;
+ TAB + Alltrim(Str(Thisform.Text1.Value)) + TAB + Alltrim(Str(Thisform.Text2.Value)) + TAB + Alltrim(Str(Thisform.Text3.Value))
Thisform.Graficar(lcDatos)
En el evento graficar del formulario escribe el siguiente código:
Parameters lcDatosGraficar
If Alias() <> "Graficos"
Select Graficos
EndIf
If GetNextModified(0,"Graficos") <> 0
=TableUpdate(.T.)
Endif
Append General Cod_grf Data lcDatosGraficar
Thisform. Refresh()
Return .T.
Y listo, el ejemplo está construido, pruébalo y me cuentas. Ahora nota que los meses de enero, febrero y marzo de la estructura de datos lcDatos no son más que el encabezado de las variables que representan los números, que para el ejemplo solamente he creado tres y luego siguen las tres variables que representan los valores numéricos en su repectivo orden analiza el ejemplo.
Cualquier inquietud que tengas con gusto te la resuelvo.
Local lcDatos
lcDatos = "Enero" + TAB + "Febrero" + TAB + "Marzo" + CRLF;
+ TAB + Alltrim(Str(Thisform.Text1.Value)) + TAB + Alltrim(Str(Thisform.Text2.Value)) + TAB + Alltrim(Str(Thisform.Text3.Value))
Thisform.Graficar(lcDatos)
En el evento graficar del formulario escribe el siguiente código:
Parameters lcDatosGraficar
If Alias() <> "Graficos"
Select Graficos
EndIf
If GetNextModified(0,"Graficos") <> 0
=TableUpdate(.T.)
Endif
Append General Cod_grf Data lcDatosGraficar
Thisform. Refresh()
Return .T.
Y listo, el ejemplo está construido, pruébalo y me cuentas. Ahora nota que los meses de enero, febrero y marzo de la estructura de datos lcDatos no son más que el encabezado de las variables que representan los números, que para el ejemplo solamente he creado tres y luego siguen las tres variables que representan los valores numéricos en su repectivo orden analiza el ejemplo.
Cualquier inquietud que tengas con gusto te la resuelvo.
- Compartir respuesta
- Anónimo
ahora mismo