Crear un grid a partir de los datos de array

314 views
Skip to first unread message

Federico Rojas Rosell

unread,
Aug 2, 2020, 11:28:42 PM8/2/20
to Comunidad de Visual Foxpro en Español
Tengo una array bidimensional arFactura(n,9) y necesito poner estos datos en un grid, pensé en mandarlos primero a un cursor y después al grid, pero al usar esta instrucción

CREATE CURSOR curFactura FROM ARRAY arFactura

me da un error de sintaxis, será que no se usa para lo que lo quiero usar?

INVERSIONES WIMARPER CA

unread,
Aug 3, 2020, 6:53:17 AM8/3/20
to publice...@googlegroups.com
Buenos días, amigo Federico, puedes crear un Cursor gridFactura en el Método Load y envias todo lo almacenado en el Arreglo a ese cursor en el Método Init. En el Grid en la Propiedad RecordSource colocas el nombre del Cursor. Luego manipulas los datos de ambos (arreglo y cursor) a tu gusto.

Nota: No tengo idea como tienes estructurado tu arreglo, pero cree una simulación.  

Método Load.
* Cursor para controlar el Grid.
create cursor gridFactura ( ;
nufactura n(10),;
fcfactura d(8),;
mnfactura y(8) )

Método Init.

* Transferir los datos del Arreglo arFactura al Cursor.
for lncni = 1 to alen(arFactura, 1)
   select gridFactura 
   append blank
   replace nufactura with arFactura[lncni, 1]
   replace fcfactura with  arFactura[lncni, 2] 
   replace mnfactura with arFactura[lncni, 3] 
endfor
* Actualizas el Grid.
ogrdFactura.refresh

Espero haberte ayudado,

Richard Marrero
Analista de Sistemas

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/d2e3cfd3-4aea-4452-8070-fc4974c60cd6o%40googlegroups.com.

ggcagnola gmail

unread,
Aug 3, 2020, 8:10:27 AM8/3/20
to publice...@googlegroups.com

perdón, pero de un cursor lo pasás a un array y después de nuevo a un cursor???

Federico Rojas Rosell

unread,
Aug 3, 2020, 12:34:11 PM8/3/20
to Comunidad de Visual Foxpro en Español
gracias, no, el array lo lleno mediante importación de datos de un archivo de texto
El dom., 2 ago. 2020 a las 23:28, Federico Rojas Rosell (<rojas...@gmail.com>) escribió:
Tengo una array bidimensional arFactura(n,9) y necesito poner estos datos en un grid, pensé en mandarlos primero a un cursor y después al grid, pero al usar esta instrucción

CREATE CURSOR curFactura FROM ARRAY arFactura

me da un error de sintaxis, será que no se usa para lo que lo quiero usar?
--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.
--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

Federico Rojas Rosell

unread,
Aug 3, 2020, 12:34:52 PM8/3/20
to Comunidad de Visual Foxpro en Español
Gracias, lo pruebo y comento


El lunes, 3 de agosto de 2020, 5:53:17 (UTC-5), INVERSIONES WIMARPER CA escribió:
Buenos días, amigo Federico, puedes crear un Cursor gridFactura en el Método Load y envias todo lo almacenado en el Arreglo a ese cursor en el Método Init. En el Grid en la Propiedad RecordSource colocas el nombre del Cursor. Luego manipulas los datos de ambos (arreglo y cursor) a tu gusto.

Nota: No tengo idea como tienes estructurado tu arreglo, pero cree una simulación.  

Método Load.
* Cursor para controlar el Grid.
create cursor gridFactura ( ;
nufactura n(10),;
fcfactura d(8),;
mnfactura y(8) )

Método Init.

* Transferir los datos del Arreglo arFactura al Cursor.
for lncni = 1 to alen(arFactura, 1)
   select gridFactura 
   append blank
   replace nufactura with arFactura[lncni, 1]
   replace fcfactura with  arFactura[lncni, 2] 
   replace mnfactura with arFactura[lncni, 3] 
endfor
* Actualizas el Grid.
ogrdFactura.refresh

Espero haberte ayudado,

Richard Marrero
Analista de Sistemas

El dom., 2 ago. 2020 a las 23:28, Federico Rojas Rosell (<rojas...@gmail.com>) escribió:
Tengo una array bidimensional arFactura(n,9) y necesito poner estos datos en un grid, pensé en mandarlos primero a un cursor y después al grid, pero al usar esta instrucción

CREATE CURSOR curFactura FROM ARRAY arFactura

me da un error de sintaxis, será que no se usa para lo que lo quiero usar?

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

ggcagnola gmail

unread,
Aug 3, 2020, 12:52:07 PM8/3/20
to publice...@googlegroups.com

tons tratá de hacer las cosas en un mismo proceso...

llenar el array y generar el cursor...

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/32b1580f-c973-4dad-8575-5dddc99b8bdeo%40googlegroups.com.

Federico Rojas Rosell

unread,
Aug 4, 2020, 6:53:46 PM8/4/20
to Comunidad de Visual Foxpro en Español
disculpa la ignorancia, como hago eso?

ggcagnola gmail

unread,
Aug 5, 2020, 8:13:30 AM8/5/20
to publice...@googlegroups.com

si recorrés un archivo y vas "rellenando" uno x uno los elementos d l array, vas insertando uno x uno el cursor que necesitás...

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/3c55b931-6eb9-420a-826f-fb4d6d25c988o%40googlegroups.com.

HernanCano

unread,
Aug 5, 2020, 8:38:46 AM8/5/20
to Comunidad de Visual Foxpro en Español
Federico:
Estás malinterpretando el uso del comando.

La ayuda dice:

CREATE CURSOR - SQL Command
FROM ARRAY ArrayName

Specifies the name of an existing array whose contents are the name, type, precision, and scale for each field in the temporary table. You can use the FROM ARRAY clause instead of specifying individual fields. For the proper format of the contents of the array, see AFIELDS( ) Function.

Por lo tanto el arreglo debe tener una "estructura" que pueda ser usada por el comando CREATE CURSOR para generar el cursor; es decir el contenido del arreglo que quieres usar debe tener info de "estructura de un DBF", de forma como se obtiene con la función AFIELDS() (ésto es lo que dice la ayuda).

Si lo que necesitas es crear un grid a partir de los datos de un arreglo numérico, una forma de lograrlo es hacer lo que te dice Richard, aunque mi propuesta sería (me disculpo si no he probado este código; sólo transcribo lo que propone Roichard, ajustando a tu escenario):

Método Load.
* Cursor para controlar el Grid.
create cursor gridFactura ( Campo01 N(9), Campo02 N(9) )

Método Init.
* Transferir los datos del Arreglo arFactura al Cursor.
for lncni = 1 to alen(arFactura, 1)
   select gridFactura 
   append blank
   replace Campo01 with arFactura[lncni, 1]
   replace Campo02 with arFactura[lncni, 2] 
endfor
* Actualizas el Grid.
ogrdFactura.refresh

Lo pruebas y nos cuentas.

Federico Rojas Rosell

unread,
Aug 11, 2020, 10:36:51 PM8/11/20
to Comunidad de Visual Foxpro en Español
Buenas noches, tardé en probarlo, pero fue la solución. Gracias Richard y Herán.

Por otro lado, hay alguna forma en que no se pueda acceder a ciertas columnas, usando el readonly hace que no se pueda modificar, pero yo lo que quiero es que cuando me desplace de una columna a otra, estas columnas se salten.
Trataré de explicarme mejor, en la grilla tengo 12 columnas, las primeras 9 sólo son informativas y las últimas 3 son las que se van a ser editadas, lo que quiero es que no se pueda pasar por las primeras 9 columnas

J. Enrique Ramos Menchaca

unread,
Aug 11, 2020, 10:53:56 PM8/11/20
to Comunidad de Visual Foxpro en Español
Federico, podría ser algo así:

WITH THISFORM.Grid1

FOR i = 1 TO 9
.Columns(i).Text1.Enabled = .F.
ENDFOR

ENDWITH

Federico Rojas Rosell

unread,
Aug 11, 2020, 11:34:51 PM8/11/20
to Comunidad de Visual Foxpro en Español
Muchas gracias

Esto era lo que necesitaba

INVERSIONES WIMARPER CA

unread,
Aug 13, 2020, 6:11:32 PM8/13/20
to publice...@googlegroups.com
Intenta esto: Create un Metodo Personalizado en el Formulario y cuando entres en unas de las Columnas que no desees que el usuario entre ejecutas el Metodo InteractiveChange con el codigo del metodo personalizado, en cada columna bloqueada y envias el Cursor a la columna que deseas.

Atentamente,
Richard Marrero

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages