Cargar Datos a un Grid y Almacenar éstos.

4,592 views
Skip to first unread message

stallman stallman

unread,
May 2, 2011, 10:19:47 PM5/2/11
to publice...@googlegroups.com
Hola Estimados Señores.

- Quisiera por favor si alguien me puede ayudar en lo siguiente, que de ninguna forma logro resolver:

1- Quisiera pasar los datos que tengo en dos Text_Box a un Grid al momento de presionar un commondBotton "Registrar".
(txt_codigo(int_Codigo), txt_desc_prod(intDesc_Prod))

2- Ahora bien cómo hago para almacenar los datos que contiene el grid en una tabla al presionar un commondBotton "Almacenar"


- Mil gracias por la toda la ayuda.

Walter R. Ojeda Valiente

unread,
May 2, 2011, 10:42:20 PM5/2/11
to publice...@googlegroups.com
Un grid lo que hace es mostrar el contenido de una tabla o cursor.

Por lo tanto, lo que debes hacer es especificar:
- Los datos de cual tabla o cursor te mostrará
- Cuales campos de esa tabla o cursor te mostrará
- Utilizar el método REFRESH() del grid para que los muestre.

Lo que tienes en un grid ya está almacenado en una tabla o cursor. Así que tu botón "Almacenar" lo que haría es copiar los datos de una tabla o cursor en otra tabla.

Saludos.

Walter.





Date: Mon, 2 May 2011 20:19:47 -0600
Subject: [vfp] Cargar Datos a un Grid y Almacenar éstos.
From: stall...@gmail.com
To: publice...@googlegroups.com

stallman stallman

unread,
May 2, 2011, 11:06:13 PM5/2/11
to publice...@googlegroups.com
Muy Bien Walter, muchas gracias no sabía que el Grid hacía solamente éso.

- Lo que me queda más funcional sería cargar los datos a un Cursor ( ya que los datos de los textbox provienen de una búsqueda).

1- Ahora bien, cómo hago para cargar los datos de los TextBox al Cursor?, y que cada vez que presiono "Agregar" me sume al grid los datos que contienen los textbox.

1.1- En este caso los datos que contengan: Txt_Codigo(intCodigo), Txt_Desc_Prod(strDesc_Prod)

2- Qué mecanismo podría para almacenar todos los datos que se muestren en el Grid?, es decir si se eligieron 30 Productos; almacenar los 30 códigos y los 30 Prod_Desc de una vez.

Gracias.

Walter R. Ojeda Valiente

unread,
May 2, 2011, 11:22:45 PM5/2/11
to publice...@googlegroups.com
Para agregar datos puedes usar:
- INSERT INTO o,
- APPEND BLANK con
    . GATHER MEMVAR o con,
    . REPLACE MiCampo WITH MiVariable

Para que los datos que agregaste se muestren en el grid debes ejecutar el método REFRESH() del grid.

Para almacenar todos los datos que están en una tabla (y que se muestran en un grid) en otra tabla, puedes hacerlo de varias formas:
- SCAN .... ENDSCAN
- DO WHILE .... ENDDO
- APPEND FROM

Por ejemplo:

SELECT MiTablaDelGrid

SCAN
    MiVar1 = MiCampo1
    MiVar2 = MiCampo2
    SELECT MiTabla
    APPEND BLANK
    REPLACE CampoPrincipal1 WITH MiVar1, CampoPrincipal2 WITH MiVar2
    SELECT MiTablaDelGrid
ENDSCAN

Saludos.

Walter



Date: Mon, 2 May 2011 21:06:13 -0600
Subject: Re: [vfp] Cargar Datos a un Grid y Almacenar éstos.
From: stall...@gmail.com
To: publice...@googlegroups.com

Trento

unread,
May 2, 2011, 11:27:34 PM5/2/11
to Comunidad de Visual Foxpro en Español
Me imagino que el RecordSource de tu grid es un cursor temporal. Si
así, y asumiendo que se llame crsGrid y que el Grid se llame grdDatos:

EVENTO CLICK BOTÓN "REGISTRAR"
WITH THISFORM

SELECT crsGrid
APPEND BLANK
REPLACE [campo] .txt_codigo.Value
REPLACE [campo] .txt_desc_prod.Value

*!* Aquí puedes pensar en "limpiar" los textbox:
.txt_codigo.Value = "" && Si acaso es tipo caracter
.txt_desc_prod_Value = ""

.grdDatos.Refresh
ENDWITH


Ahora, para pasar los datos del Grid a la Tabla:

EVENTO CLICK BOTÓN "ALMACENAR"

SELECT [tabla]
APPEND FROM DBF('crsDatos')

Espero haberte entendido.


Saludos.

Trento

unread,
May 2, 2011, 11:34:59 PM5/2/11
to Comunidad de Visual Foxpro en Español
Ups....

APPEND FROM DBF('crsGrid')

Éstas ya no son horas, la verdad =D


Saludos.

stallman stallman

unread,
May 3, 2011, 4:00:01 AM5/3/11
to publice...@googlegroups.com
Muy Bien Gracias. Trabajo en ello, te informo de los resultados...


1- REPLACE [campo]

este [campo] debe indicar el campo del Grid?

Trento

unread,
May 3, 2011, 2:27:09 PM5/3/11
to Comunidad de Visual Foxpro en Español
Así es. Me imagino que ya lo habrás checado.

Saludos.

stallman stallman

unread,
May 3, 2011, 10:06:15 PM5/3/11
to publice...@googlegroups.com
Buenas Trento.

- Mira estoy trabajando en éste cursor, pero tengo una gran Pregunta:

Cómo Cargo a mi crsGrid los siguientes datos que se encuentran en los distintos TextBox del Formulario y que son datos que provienen de las distintas tablas:

1-Tabla: Lugar
    Datos Extraídos
: Cod_Lugar,Desc_Lugar
2-Tabla: Clientes
    Datos Extraídos:ID_Clien, Apellido1, Apellido2, Nombre
3-Tabla: Productos
    Datos Extraídos:Cod_Prod, Desc_Prod
4-Tabla: Pedidos
    Datos Extraídos: Num_Pedido

- Éstos son los datos que actualmente extraigo de las distintas tablas y que tengo en el formulario; cómo hago para cargarlos al cursor crsGrid?

lervys cuicas

unread,
May 3, 2011, 9:47:13 PM5/3/11
to publice...@googlegroups.com
Buenas, no deberias hacerle las preguntas a un miembro especifico del foro porque tienes menos oportunidad de que te respondas. Tienes que crear un cursor con campos semejantes a los que estan recibiendo los text para que tomes esos datos, por ejemplo si es de tipo carater el valor que recibe text1 entonces en tu cursor debes colocar ese dato de tipo caracter
thisform.crsGrid.recordsource = ''
CREATE CURSOR prueba ( Cod c(30), Desc c(30), ID n(8,2))
thisform.crsGrid.recordsource = ''
thisform.crsGrid.RecordSource = 'prueba'
Eso lo creas en el init del grid, bueno si es eso lo que quieres hacer

Date: Tue, 3 May 2011 20:06:15 -0600
Subject: Re: [vfp] Re: Cargar Datos a un Grid y Almacenar éstos.
From: stall...@gmail.com
To: publice...@googlegroups.com

lervys cuicas

unread,
May 3, 2011, 9:55:48 PM5/3/11
to publice...@googlegroups.com
thisform.crsGrid.recordsource = ''
INSERT INTO prueba VALUES (thisform.text1.Value,thisform.text2.Value,VAL(thisform.text5.Value))
thisform.crsGrid.RecordSource = 'prueba'
thisform.crsGrid.Refresh

El otro mensaje era para crear el cursor temporal y aqui es para cargarlos al grid....! Bueno eso es lo que entendi. Buenas noches


Date: Tue, 3 May 2011 20:06:15 -0600
Subject: Re: [vfp] Re: Cargar Datos a un Grid y Almacenar éstos.
From: stall...@gmail.com
To: publice...@googlegroups.com

stallman stallman

unread,
May 3, 2011, 11:07:33 PM5/3/11
to publice...@googlegroups.com
Muchas Gracias Lervys tanto por la recomendación como por la ayuda, en seguida realizo las pruebas, es preciso lo que quería lograr.

Estaré comunicando los resultados.Gracias.

stallman stallman

unread,
May 4, 2011, 8:13:00 PM5/4/11
to publice...@googlegroups.com
Buenas Señores!

Quisiera un poco de orientación dado que me da el siguiente error:

ERROR "No coinciden los tipos de Datos"

1- En el init del Grid tengo ésto.

THISFORM.Grd_Productos.RecordSource=''

CREATE CURSOR crsPEDIDO (Identificacion C(14))

THISFORM.Grd_Productos.RecordSource=''
THISFORM.Grd_Productos.RecordSource='crsPEDIDO'


2- En el Click del Botón Agragar tengo:

INSERT INTO crsPEDIDO (Identificacion);
VALUES (THISFORM.Txt_Identificacion.Value)

THISFORM.Grd_Productos.RecordSource='crsPEDIDO'
THISFORM.Grd_Productos.Refresh

3- Le he realizado solamente con un dato para probar y aun así me da error, otra cuestión es que cuando le doy depurar el cuando señalo crsPEDIDO lo que contiene es:
THISFORM.Txt_Identificacion.Value


Les agradezco la orientación.

lervys cuicas

unread,
May 4, 2011, 9:22:10 PM5/4/11
to publice...@googlegroups.com
Coloca solo esto en insert, ademas lo que hay en txt_Identificacion debe ser un dato de tipo caracter con una longitud de 14
INSERT INTO crsPEDIDO 
VALUES (THISFORM.Txt_Identificacion.Value)

Date: Wed, 4 May 2011 18:13:00 -0600

Subject: Re: [vfp] Re: Cargar Datos a un Grid y Almacenar éstos.
From: stall...@gmail.com
To: publice...@googlegroups.com

lervys cuicas

unread,
May 4, 2011, 9:35:39 PM5/4/11
to publice...@googlegroups.com
1- En el init del Grid tengo ésto.

THISFORM.Grd_Productos.RecordSource=''

CREATE CURSOR crsPEDIDO (Identificacion C(14))

THISFORM.Grd_Productos.RecordSource=''
THISFORM.Grd_Productos.RecordSource='crsPEDIDO'


2- En el Click del Botón Agragar tengo:

INSERT INTO crsPEDIDO (Identificacion);
VALUES (THISFORM.Txt_Identificacion.Value)

THISFORM.Grd_Productos.RecordSource='crsPEDIDO'
THISFORM.Grd_Productos.Refresh


En el 1ro creas el temporal, en el 2do cargas el grid con el temporal y te falta enviar los datos del temporal a tu tabla libre o donde lo vas a guardar

En el Click del Boton guardar en tabla

SCAN
INSERT INTO tabla VALUES(crsPEDIDO.Identificacion)
ENDSCAN

Date: Wed, 4 May 2011 18:13:00 -0600

Subject: Re: [vfp] Re: Cargar Datos a un Grid y Almacenar éstos.
From: stall...@gmail.com
To: publice...@googlegroups.com

Trento

unread,
May 5, 2011, 12:29:40 AM5/5/11
to Comunidad de Visual Foxpro en Español
Hola Stallman y Lervys

¿Qué les parece esto?

En el Init del Grid:

CREATE CURSOR crsPEDIDO ( Identificacion C(14) )

THIS.RecordSource = "crsPEDIDO"
DODEFAULT( ) && Opcional, si tu grid está basado en una clase
particular

En el Click de botón AGREGAR

SELECT crsPEDIDO
APPEND BLANK
REPLACE Identificacion WITH THISFORM.Txt_Identificacion.Value
THISFORM.Grid_Productos.Refresh

O bien:
INSERT INTO crsPEDIDO (Identificacion);
VALUES (THISFORM.Txt_Identificacion.Value)
THISFORM.Grid_Produtos.Refresh


Como bien dijo Lervys, se asume que THISFORM.Txt_Identificacion.Value
tendrá un valor tipo caracter con una longitud de 14.


Saludos.

On 4 mayo, 20:35, lervys cuicas <lervy...@hotmail.com> wrote:
> 1- En el init del Grid tengo ésto.THISFORM.Grd_Productos.RecordSource=''CREATE CURSOR crsPEDIDO (Identificacion C(14))THISFORM.Grd_Productos.RecordSource=''THISFORM.Grd_Productos.RecordSource='crsPEDIDO'
>
> 2- En el Click del Botón Agragar tengo:INSERT INTO crsPEDIDO (Identificacion);VALUES (THISFORM.Txt_Identificacion.Value)THISFORM.Grd_Productos.RecordSource='crsPEDIDO'THISFORM.Grd_Productos.Refresh
>
> En el 1ro creas el temporal, en el 2do cargas el grid con el temporal y te falta enviar los datos del temporal a tu tabla libre o donde lo vas a guardar
> 3 En el Click del Boton guardar en tabla
> SCANINSERT INTO tabla VALUES(crsPEDIDO.Identificacion)ENDSCANDate: Wed, 4 May 2011 18:13:00 -0600
> Subject: Re: [vfp] Re: Cargar Datos a un Grid y Almacenar éstos.
> From: stallma...@gmail.com

lervys cuicas

unread,
May 5, 2011, 5:56:37 PM5/5/11
to publice...@googlegroups.com
Buenas tardes, muy bueno eso, lo tendré en cuenta en adelante. Gracias por tu comentario...!!

> Date: Wed, 4 May 2011 21:29:40 -0700
> Subject: [vfp] Re: Cargar Datos a un Grid y Almacenar éstos.
> From: tren...@gmail.com
> To: publice...@googlegroups.com

Trento

unread,
May 5, 2011, 6:41:23 PM5/5/11
to Comunidad de Visual Foxpro en Español
Gracias a ustedes por participar.


Saludos

On 5 mayo, 16:56, lervys cuicas <lervy...@hotmail.com> wrote:
> Buenas tardes, muy bueno eso, lo tendré en cuenta en adelante. Gracias por tu comentario...!!
>
>
>
>
>
>
>
> > Date: Wed, 4 May 2011 21:29:40 -0700
> > Subject: [vfp] Re: Cargar Datos a un Grid y Almacenar éstos.
> > From: trento...@gmail.com

stallman stallman

unread,
May 5, 2011, 9:43:22 PM5/5/11
to publice...@googlegroups.com
Buenas Estimados Señores.
Perdonen la molestia: Sigo teniendo Problemas, hice lo siguiente y obtuve los siguientes resultados:

1-  En el Init del Grd_Productos tengo:

CREATE CURSOR crsPEDIDO (Nombre C(20), Apellido1 C(20), Apellido2 C(20))

THISFORM.Grd_Productos.RecordSource= "crsPEDIDO"
DODEFAULT( )

2- En Click del Cmd_Agregrar

INSERT INTO crsPEDIDO (Nombre, Apellido1, Apellido2);
VALUES (THISFORM.Txt_Nombre.Value, THISFORM.Txt_Apellido1.Value, THISFORM.Txt_Apellido2.Value)
THISFORM.Grid_Produtos.Refresh


Resultados

1- Una vez que inicia el Form el Grd_Productos queda totalmente en blanco.
2- Cuando doy click en el Cmd_Agregar: Sale un Cuadro :
                          Abrir.
                           Tablas de la base de Datos

*y Me muestra todas las tablas que contiene la BD.

Les agradecería me recomendaran que puedo cambiar o si estoy haciendo algo mal.

Mil gracias.

stallman stallman

unread,
May 5, 2011, 10:18:46 PM5/5/11
to publice...@googlegroups.com
Buenas Tardes Estimados Profesores.

Con la ayuda de ustedes he resuelto el problema de la siguiente manera:


1- En el Init del Grd_Productos

CREATE CURSOR crsPEDIDO (Nombre C(20), Apellido1 C(20), Apellido2 C(20))

THISFORM.Grd_Productos.RecordSource= "crsPEDIDO"


2- En Click del Cmd_Agregrar

SELECT crsPEDIDO

INSERT INTO crsPEDIDO (Nombre, Apellido1, Apellido2);
VALUES (THISFORM.Txt_Nombre.Value, THISFORM.Txt_Apellido1.Value, THISFORM.Txt_Apellido2.Value)
THISFORM.Grd_Productos.Refresh

3- En Click del Cmd_Guardar
SCAN
INSERT INTO Pedidos VALUES(crsPEDIDO.Nombre, crsPEDIDO.Apellido1, crsPEDIDO.Apellido2)
ENDSCAN


* Nota:   En el punto 2 se me ocurrió agregar SELECT crsPEDIDO al inicio para seleccionar el cursor.

No se que piensan si está bien éso, dado que no me lo habían recomendado, sin embargo así como está me trabaja bien.

Saludos.

Douglas Sánchez Guillén

unread,
May 5, 2011, 10:24:05 PM5/5/11
to publice...@googlegroups.com
Correcto pero un pequeño consejo, todo lo que implique apertura de tablas, conexiones o creacion de cursores le recomiendo
utilizar macro sustitución para no crear nombres de cursores unicos y que lo haga en EL LOAD del form.


saludes... 
--
Ing. Douglas Sánchez Guillén
      Consultor Informatico
Movistar: 505 8759 - 5342
Claro: 505 88495476

stallman stallman

unread,
May 5, 2011, 10:39:01 PM5/5/11
to publice...@googlegroups.com
Muy Bien, atendiendo a tu recomendación entonces esto:



1- En el Init del Grd_Productos

CREATE CURSOR crsPEDIDO (Nombre C(20), Apellido1 C(20), Apellido2 C(20))

THISFORM.Grd_Productos.RecordSource= "crsPEDIDO"



Debería cambiarse por:


1- En el Load del Frm_Solicitudes


CREATE CURSOR crsPEDIDO (Nombre C(20), Apellido1 C(20), Apellido2 C(20))

THISFORM.Grd_Productos.RecordSource= "crsPEDIDO"


* Sería así?

Douglas Sánchez Guillén

unread,
May 5, 2011, 10:43:55 PM5/5/11
to publice...@googlegroups.com
Asi te quedaria mejor.  recuerda abrir las tablas o en el entorno, del formulario o en el load.

1- En el Load del Frm_Solicitudes


CREATE CURSOR crsPEDIDO (Nombre C(20), Apellido1 C(20), Apellido2 C(20))



2- En el Init del Grd_Productos

THISFORM.Grd_Productos.RecordSource= "crsPEDIDO"


saludes...



El 5 de mayo de 2011 20:39, stallman stallman <stall...@gmail.com> escribió:
Muy Bien, atendiendo a tu recomendación entonces esto:



1- En el Init del Grd_Productos

CREATE CURSOR crsPEDIDO (Nombre C(20), Apellido1 C(20), Apellido2 C(20))

THISFORM.Grd_Productos.RecordSource= "crsPEDIDO"



Debería cambiarse por:


1- En el Load del Frm_Solicitudes




1- En el Init del Grd_Productos 
THISFORM.Grd_Productos.RecordSource= "crsPEDIDO"

* Sería así?


stallman stallman

unread,
May 5, 2011, 10:59:31 PM5/5/11
to publice...@googlegroups.com
Muy bien. Muchas gracias por la atención y recomendación.

Saludos.
Reply all
Reply to author
Forward
0 new messages