Validar datos con tablas recorriendo registros

difenbachia
11 de Julio del 2008
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
*