FoxPro/Visual FoxPro - Remplazar datos de cursor a tabla origen?

   
Vista:

Remplazar datos de cursor a tabla origen?

Publicado por Korok (5 intervenciones) el 10/01/2013 11:22:21
Hola a todos.
Estoy desarrollando un programa en visualfox y me surge un problema. Tengo un formulario en el que tengo un Grid y en ese grid quiero ser capaz de poder modificar los datos y que se me guarden.

Estoy usando un cursor y tablas DBF. Consigo pasar los datos de la tabla al cursor y modifcarlos pero despues no se como poder volver a pasar los datos del cursor ya modificados a la tabla remplazando los viejos.

Este es el codigo que estoy usando:

INIT:

SELECT * FROM facturaa AS alias2 WHERE nfactura=xx AND re1=SPACE(50) AND linea<9000 into cursor My_cursor READWRITE
Select My_cursor
thisform.grid1.recordsourcetype=0
thisform.grid1.recordsource=""
Thisform.griD1.RecordSourceType = 1
ThisForm.griD1.Recordsource = "My_cursor"
thisform.griD1.ColumnCount=5
thisform.griD1.Columns[1].controlsource="cod_mo"
THISFORM.GRID1.Columns[2].controlsource="rep1"
THISFORM.GRID1.Columns[3].controlsource="eprecio1"
THISFORM.GRID1.Columns[4].controlsource="tmo1"
THISFORM.GRID1.Columns[5].controlsource="seccion"
thisform.griD1.Columns[1].header1.caption="Cod_mo"
thisform.griD1.Columns[2].header1.caption="Concepto"
thisform.griD1.Columns[3].header1.caption="Precio"
thisform.griD1.Columns[4].header1.caption="T.M.O"
thisform.griD1.Columns[5].header1.caption="Sec."
thisform.grid1.Columns[1].width=80
thisform.grid1.Columns[2].width=400
thisform.grid1.Columns[3].width=80
thisform.grid1.Columns[4].width=40
thisform.grid1.Columns[5].width=20




Si me pudieran ayudar se lo agradeceria enormemente. Muchas gracias
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

Remplazar datos de cursor a tabla origen?

Publicado por Fidel (320 intervenciones) el 10/01/2013 19:57:31
Para tablas dbf, incluso en una LAN, puedes utilizar un recurso eficiente y rápido:

USE FACTURAA IN 0 SHARED
SELECT *,RECNO() FROM facturaa AS alias2 WHERE nfactura=xx AND re1=SPACE(50) AND linea<9000 into cursor My_cursor READWRITE

El campo en el que cae el número de registro está formado por el prefijo "EXP_" + el número de campo:
select my_Cursor
cExp="Exp_"+ltrim(str((fcount()))

Después de hacer los cambios, iría:
select my_cursor
SCAN
NGO=&cExp
scatter MEMVAR
SELECT FACTURAA
GO NGO
IF RLOCK()
GATHER MEMVAR
UNLOCK
ENDIF
ENDSCAN
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

Remplazar datos de cursor a tabla origen?

Publicado por es_binario (757 intervenciones) el 11/01/2013 02:16:11
Yo hace muchos a;os usaba el scatter MEMVAR con foxpro 5.0 y tengo un cliente con un programa de inventarios que todabia lo usa sin ningun problema...

en la actualidad creo un metodo llamado guardar datos, y lo que hago es recorrer el cursor con un for nex, y guardo registro por registro con un intert values.

es mas codigo, pero funciona a la perfecion y sin demoras...

tambien si son exactamente iguales tienes la opcion appen from.

hay muchas posibilidades y todas implican escribir mas codigo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
*// graba el detalle de la venta
				SELECT mi_venta
				FOR a = 1 TO RECCOUNT()
					SELECT mi_venta
					GO a
						LOCAL cant_ as Number
						LOCAL unidad_m_ as character
						LOCAL codigo_ as String
						LOCAL descripcion_ as String
						LOCAL precio_u_ as Number
						LOCAL importe_ as Number
						cant_ = mi_venta.cantidad
						codigo_ = ALLTRIM(STR(a,5))
						descripcion_ = ALLTRIM(mi_venta.articulo)
						precio_u_ = mi_venta.precio
						importe_ = mi_venta.precio *  mi_venta.cantidad
						unidad_m_ = mi_venta.unidad_m
						INSERT INTO detalle(pedido, cant, unidad_m, codigo, descripcion, precio_u, importe);
							VALUES (pedido_, cant_, unidad_m_, codigo_, descripcion_, precio_u_, importe_)
				ENDFOR
 
				*// graba la venta
				LOCAL fecha_ as Date
				LOCAL iva_ as Number
				LOCAL fac_FORMADEPAGO as character
				fecha_ = Thisform.Txtfecha.Value
				iva_ = Thisform.Txtiva.Value
				fac_FORMADEPAGO = ALLTRIM(Thisform.cmbFormapago.Value)
				INSERT INTO ventas(pedido, fecha, subtotal, iva, total, cliente, folio, f_pago);
					values(pedido_, fecha_, sub_total_, iva_, total_, cliente_, fac_folio, fac_FORMADEPAGO)



se vee mal tabulado por que es parte de un codigo mucho mas grande... tambien vale la opcion de Fidel.
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

Remplazar datos de cursor a tabla origen?

Publicado por Fidel (320 intervenciones) el 11/01/2013 15:53:13
Esta alternativa es más completa. Si se agrega un registro al cursor, el campo de control de número de registro quedará en cero.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
select my_cursor
SCAN
	NGO=Evaluate(cExp)
	scatter MEMVAR
	SELECT FACTURAA
	IF NGO=0  && SE AGREGO UN REGISTRO AL CURSOR
		INSERT INTO FACTURAA FROM MEMVAR  && agrega el registro a la tabla
	ELSE
		GO NGO
		IF RLOCK()
			GATHER MEMVAR
		ENDIF
	ENDIF
	UNLOCK
ENDSCAN
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

Remplazar datos de cursor a tabla origen?

Publicado por victor perez (137 intervenciones) el 11/01/2013 20:09:23
Hola,

Trate de usar vuestros codigo en un formulario que tengo y que requiere una situacion similar a la presentada aqui.

Pero no me funciona.

En mi caso, tengo lo siguiente:

Select * from Almcitas where (fecha=this.value .AND. !DELETED()) order by fecha into CURSOR _citas READWRITE

Sele _Citas
Thisform.PgfFicha.Page1.Grid1.Recordsource="_Citas"
Thisform.PgfFicha.Page1.Grid1.Column1.enabled=.F.
Thisform.PgfFicha.Page1.Grid1.Column2.enabled=.F.

Se abre el grid con los datos cargados segun la condicion en del cursor.

Aqui yo puedo editar datos o rellenar los registros. Este es un control de citas medicas, y cuando se introduce la fecha para la nueva cita, antes de llenar el cursor, el sistema revisa si ya hay citas planeadas para ese dia...si no lo hay se abren 12 registros para ser llenados., es decir, que no es que se añaden registros nuevos, sino que simplemente se llenan con los datos del patiente.

Luego en el EVENTO GRABAR.CLICK tengo lo siguiente:

Sele AlmCitas
Go Top

Delete all for fecha=thisform.pgfFicha.Page1.txtFchInit.value (eSTE ES EL VALOR DE FECHA)
Append from DBF("_Citas")

SELECT _CITAS
ZAP


pero creo que con su codigo es mas seguro, pero me da errores.

Si me pueden ayudar,

Agradecido
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