FoxPro/Visual FoxPro - Validación de registro en una consulta

   
Vista:

Validación de registro en una consulta

Publicado por Néstor nestorlsilva@gmail.com (23 intervenciones) el 22/01/2016 03:56:24
Buenas noches foreros como están?
Tengo una duda a ver si me la pueden aclarar.
Tengo 2 tablas A y B en A existe información de registros de hace un buen tiempo y en B necesito guardar información por fecha. Esto ya creo estar haciéndolo asi:
Use tabla B
1
2
3
fecha_inicial=(THISFORM.Fecha1.Value)
fecha_final=(THISFORM.Fecha2.Value)
APPEND FROM "Tabla A.dbf" FOR fecha=>fecha_inicial and fecha=<fecha_final

Ahora bien la parte que más me preocupa es como validar en caso de volver a hacer las misma petición de fechas a la Tabla A y se me duplique la información en la Tabla B... como hacer para que no se me duplique esta data...

Espero haberme explicado y me puedan ayudar.... Gracias de antemano....
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

Validación de registro en una consulta

Publicado por Fidel José (319 intervenciones) el 22/01/2016 17:33:27
En general, cuando uno necesita hacer ese tipo de procesos, es conveniente crear un campo de marca y en luga de usar APPEND FROM (que es fácil pero puede resultar tosco) yo usará un SCAN / ENDSCAN con SCATTER MEMVAR / GATHER MEMVAR.
Supongamos que en la TAbla B (destino) agregas un campo llamado "Actuali" L
Esta podría ser una forma. Si tienes un índice ( INDEX ON DTOS(FECHA) TAG IndFecha ) para cada archivo funcionará mucho más rápido.
Copia tus tablas a un backup antes de modificar.

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
31
32
33
34
35
36
37
* Borrar los registros del período que tengan Actuali=.T.
SELECT *,RECNO() as gRecord ;
	FROM B ;
	WHERE ACTUALI AND  FECHA BETWEEN FECHA_INICIAL AND FECHA_FINAL ;
	INTO CURSOR curPase
IF _TALLY > 0
	SELECT curPase
	SCAN
		SELECT B
		GO curPase.gRecord
		IF RLOCK()
			DELETE
			UNLOCK
		ENDIF
	ENDSCAN
ENDIF
USE IN curPase
FLUSH in B
 
* Lectura de registros de A
SELECT * , .t. as Actuali ;
	FROM a ;
	WHERE fecha between Fecha_inicial AND Fecha_final ;
	INTO CURSOR curNuevos
 
* Agregado de Registros en B
IF _tally > 0
	SELECT curNuevos
	SCAN
		SCATTER memvar
		INSERT INTO b FROM memvar
 
	ENDSCAN
	UNLOCK IN b
	FLUSH in b
ENDIF
USE IN curNuevos
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