FoxPro/Visual FoxPro - Validar datos con tablas recorriendo registros

 
Vista:

Validar datos con tablas recorriendo registros

Publicado por Ana (2 intervenciones) el 11/07/2008 17:12:34
Hola amigos, tengo una rutina en una aplicacion que es la que tiene que validar los datos ingresados. Estos son definidos por NUMEROBO
y los campos son lot,num1,num2,num3
todo es texto y los num son de dos cifras: 01 02 03 87 54 etc...
el campo lot son letras: pueden ser desde 1 hasta 9 letras

Tengo ademas dos bases dbf: GUARDABO Y FADABO
CADA UNA CON CAMPOS lotes,num1,num2,num3

LA RUTINA SERIA, UNA VEZ INGRESADOS LOS DATOS LA SIGUIENTE
es para controlar repeticiones teniendo en cuenta que en numeros por ejemplo: num1=01 num2=02 num3=01
si ingreso num1=02 num2=01 num3=01 eso es repetido...

primero reviso en GUARDABO y luego en FADABO

Comparo el campo lot con el mismo campo en la primer tabla, recorro los registros hasta que encuentro una repeticion es decir, si ingrese en NUMEROBO.lot AB y encuentro un registro que contiene alguna de esas letras continuo, de lo contrario busco en el siguiente registro.

Si continuo reviso los numeros, es decir num1 num2 y num3
Si hay repeticion salgo e informo que no se puede ingresar.
si no hay repeticion continuo con la segunda tabla FADABO y hago lo mismo, si hay repeticion informo y si no entonces si dejo ingresar el dato.

Ya puedo cargar e ingresar el dato, pero en la rutina de control de repeticiones me sale error. Yo hice esto, a ver si me pueden decir cual es el problema que tiene mi rutina o como hacerla mejor.
GRACIAS AL QUE PUEDA AYUDARME SE LO AGRADECERE MUCHO!!!!

PROCEDURE verirepe1
SELECT numerobo
IF RECCOUNT() > 0
GOTO TOP
proceso = 0
ON ERROR GOTO BOTTOM
SELECT 9
USE GUARDABO
GOTO TOP
IF RECCOUNT('GUARDABO') = 0
DO verirepe2
ENDIF
IF proceso = 1
RETURN
ENDIF

DO WHILE .NOT. EOF()

igual = 0

IF punto <> '1'
SKIP
LOOP
ENDIF

*IF LEN(ALLTRIM(lotes))<> LEN(ALLTRIM(lote))
*SKIP
*ENDIF

FOR L1 = 1 TO LEN(ALLTRIM(lote))

FOR L2 = 1 TO LEN(ALLTRIM(lotes))
IF SUBSTR(lote, L1, 1) = SUBSTR(loterias, L2, 1)
igual = igual + 1
ELSE
ENDIF
ENDFOR

ENDFOR

ENDIF

IF igual > 0

numin = 0

nba1 = GUARDABO.num1
nba2 = GUARDABO.num2
nba3 = GUARDABO.num3

IF numerobo.num1 = nba1
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num1 = nba2 .AND. numin = 0
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num1 = nba3 .AND. numin = 0
nba3 = '**'
numin = numin + 1
ENDIF

IF numin < 1
SKIP
LOOP
ENDIF

IF numerobo.num2 = nba1 .AND. numin = 1
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num2 = nba2 .AND. numin = 1
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num2 = nba3 .AND. numin = 1
nba3 = '**'
numin = numin + 1
ENDIF

IF numin < 2
SKIP
ENDIF

IF numerobo.num3 = nba1 .AND. numin = 2
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num3 = nba2 .AND. numin = 2
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num3 = nba3 .AND. numin = 2
nba3 = '**'
numin = numin + 1
ENDIF

IF numin = 3
WAIT WINDOW ' NO PUEDE CARGAR REPETIDAS.'
SELECT 9
USE
RETURN TO cargabo1
ENDIF

ELSE
SKIP
ENDIF
ENDDO

DO verirepe2
RETURN
*

PROCEDURE verirepe2
SELECT 9
USE
ON ERROR GOTO BOTTOM
SELECT 3
USE 'FADABO'
GOTO TOP
proceso = 1
IF RECCOUNT('FADABO') = 0
SELECT 3
USE
RETURN
ENDIF

DO WHILE .NOT. EOF()

igual = 0

IF punto <> '1'
SKIP
ENDIF

*IF LEN(ALLTRIM(lotes))<> LEN(ALLTRIM(lote))
*SKIP
*ENDIF

FOR L1 = 1 TO LEN(ALLTRIM(lote))

FOR L2 = 1 TO LEN(ALLTRIM(lotes))
IF SUBSTR(lote, L1, 1) = SUBSTR(lotes, L2, 1)
igual = igual + 1
ELSE
ENDIF
ENDFOR

ENDFOR

ENDIF

IF igual > 0

numin = 0

nba1 = FADABO.num1
nba2 = FADABO.num2
nba3 = FADABO.num3

IF numerobo.num1 = nba1
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num1 = nba2 .AND. numin = 0
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num1 = nba3 .AND. numin = 0
nba3 = '**'
numin = numin + 1
ENDIF

IF numin < 1
SKIP
ENDIF

IF numerobo.num2 = nba1 .AND. numin = 1
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num2 = nba2 .AND. numin = 1
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num2 = nba3 .AND. numin = 1
nba3 = '**'
numin = numin + 1
ENDIF

IF numin < 2
SKIP
ENDIF

IF numerobo.num3 = nba1 .AND. numin = 2
nba1 = '**'
numin = numin + 1
ENDIF
IF numerobo.num3 = nba2 .AND. numin = 2
nba2 = '**'
numin = numin + 1
ENDIF
IF numerobo.num3 = nba3 .AND. numin = 2
nba3 = '**'
numin = numin + 1
ENDIF

IF numin = 3

WAIT WINDOW ' NO PUEDE CARGAR REPETIDAS.'
SELECT 3
USE
RETURN TO cargabo1
ENDIF

ELSE
SKIP
ENDIF

ENDDO
SELECT 3
USE
RETURN
*
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

RE:Validar datos con tablas recorriendo registros

Publicado por Plinio (7841 intervenciones) el 11/07/2008 18:09:34
Cual es el mensaje de error y en que linea?
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

RE:Validar datos con tablas recorriendo registros

Publicado por Ana (2 intervenciones) el 11/07/2008 18:24:33
Si no pongo el ON ERROR GOTO BOTTOM me tira un mensaje de error de que se encontro fin de archivo.

Pero el problema mas grave es que la rutina no recorre cada registro no se porque a veces me da bien y a veces carga un dato repetido como si no lo encontrara en la tabla. es decir no estoy pudiendo controlar que busque registro por registro de las dos tablas para encontrar datos repetidos.
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

RE:Validar datos con tablas recorriendo registros

Publicado por lorena (1 intervención) el 17/07/2009 04:44:02
hola.... cuando usas las tablas, en visual fox pro generalmente solo pones select nombretabla y no la abres en una area, ya que en el entorno de datos del formulario la tabla esta abierta, ese es un error muy comun del trabajo en vis fox.
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