• Viernes 15 de Noviembre de 2024, 08:04

Autor Tema:  Validar datos con tablas recorriendo cada registro  (Leído 1306 veces)

difenbachia

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Validar datos con tablas recorriendo cada registro
« en: Viernes 11 de Julio de 2008, 17:24 »
0
Hola amigos, tengo una rutina en una aplicacion en FOX 2.6 DOS, 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
*