Validar repetición entre tablas
Hola Víctor, ¿puedo hacerte una consulta?
Estoy haciendo una aplicación en FOX 2.6 DOS ( en realidad es un cambio)
Tengo dos tablas guarda.dbf y jugada.dbf
Cargo 5 números de dos cifras
Y luego válido
Abro la primer tabla y comparo si no hay repetición abro la segunda si no hay repetición grabo de lo contrario pongo en blanco y debe cargar otra jugada.
Ahora bien... El problema es que la repetición debe ser sin ordenar, enton ces no se como hacer ese procedimiento.
Puede hacerlo pero solo si no hay repetición de números
es decir:
Cargo: 01 02 03 04 05
Busco en tabla 1: si hay un registro: 01 03 02 05 04 da repetición
pero si encuentra: 01 02 03 04 04 también da repetición
no se como resolver esto.
El segundo problema es que a veces se cuelga y no da error y no se el motivo.
Este es el proceso... Y lo resolví así pero es muy extenso, imaginate cuando tenga que cargar 20 números.
PROCEDURE verirepe1
proceso = 0
ON ERROR
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
ENDIF
*IF LEN(ALLTRIM(loterias))<> LEN(ALLTRIM(lote))
*SKIP
*ENDIF
FOR L1 = 1 TO LEN(ALLTRIM(lote))
FOR L2 = 1 TO LEN(ALLTRIM(loterias))
IF SUBSTR(lote, L1, 1) = SUBSTR(loterias, L2, 1)
igual = igual + 1
ELSE
ENDIF
ENDFOR
ENDFOR
ENDIF
IF igual > 0
numin1 = 0
numin2 = 0
numin3 = 0
IF numerobo.num1 = num1
numin1 = 1
ELSE
IF numerobo.num1 = num2
numin1 = 2
ELSE
IF numerobo.num1 = num3
numin1 = 3
ELSE
SKIP
ENDIF
ENDIF
ENDIF
IF numin1 = 1
IF numerobo.num2 = num2
numin2 = 2
ELSE
IF numerobo.num2 = num3
numin2 = 3
ELSE
SKIP
ENDIF
ENDIF
ENDIF
IF numin1 = 2
IF numerobo.num2 = num1
numin2 = 1
ELSE
IF numerobo.num2 = num3
numin2 = 3
ELSE
SKIP
ENDIF
ENDIF
ENDIF
IF numin1 = 3
IF numerobo.num2 = num1
numin2 = 1
ELSE
IF numerobo.num2 = num2
numin2 = 2
ELSE
SKIP
ENDIF
ENDIF
ENDIF
IF numin1 = 1 and numin2 = 2
IF numerobo.num3 = num3
numin3 = 3
ENDIF
ENDIF
IF numin1 = 1 and numin2 = 3
IF numerobo.num3 = num2
numin3 = 2
ENDIF
ENDIF
IF numin1 = 2 and numin2 = 1
IF numerobo.num3 = num3
numin3 = 3
ENDIF
ENDIF
IF numin1 = 2 and numin2 = 3
IF numerobo.num3 = num1
numin3 = 2
ENDIF
ENDIF
IF numin1 = 3 and numin2 = 1
IF numerobo.num3 = num2
numin3 = 2
ENDIF
ENDIF
IF numin1 = 3 and numin2 = 2
IF numerobo.num3 = num1
numin3 = 1
ENDIF
ENDIF
IF numin1 > 0 AND numin2 > 0 AND numin3 > 0
WAIT WINDOW ' NO PUEDE CARGAR REPETIDAS.'
RETURN TO cargabo1
ENDIF
ELSE
SKIP
Endif
¿Qué estoy haciendo mal?
Gracias desde ya víctor!
Estoy haciendo una aplicación en FOX 2.6 DOS ( en realidad es un cambio)
Tengo dos tablas guarda.dbf y jugada.dbf
Cargo 5 números de dos cifras
Y luego válido
Abro la primer tabla y comparo si no hay repetición abro la segunda si no hay repetición grabo de lo contrario pongo en blanco y debe cargar otra jugada.
Ahora bien... El problema es que la repetición debe ser sin ordenar, enton ces no se como hacer ese procedimiento.
Puede hacerlo pero solo si no hay repetición de números
es decir:
Cargo: 01 02 03 04 05
Busco en tabla 1: si hay un registro: 01 03 02 05 04 da repetición
pero si encuentra: 01 02 03 04 04 también da repetición
no se como resolver esto.
El segundo problema es que a veces se cuelga y no da error y no se el motivo.
Este es el proceso... Y lo resolví así pero es muy extenso, imaginate cuando tenga que cargar 20 números.
PROCEDURE verirepe1
proceso = 0
ON ERROR
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
ENDIF
*IF LEN(ALLTRIM(loterias))<> LEN(ALLTRIM(lote))
*SKIP
*ENDIF
FOR L1 = 1 TO LEN(ALLTRIM(lote))
FOR L2 = 1 TO LEN(ALLTRIM(loterias))
IF SUBSTR(lote, L1, 1) = SUBSTR(loterias, L2, 1)
igual = igual + 1
ELSE
ENDIF
ENDFOR
ENDFOR
ENDIF
IF igual > 0
numin1 = 0
numin2 = 0
numin3 = 0
IF numerobo.num1 = num1
numin1 = 1
ELSE
IF numerobo.num1 = num2
numin1 = 2
ELSE
IF numerobo.num1 = num3
numin1 = 3
ELSE
SKIP
ENDIF
ENDIF
ENDIF
IF numin1 = 1
IF numerobo.num2 = num2
numin2 = 2
ELSE
IF numerobo.num2 = num3
numin2 = 3
ELSE
SKIP
ENDIF
ENDIF
ENDIF
IF numin1 = 2
IF numerobo.num2 = num1
numin2 = 1
ELSE
IF numerobo.num2 = num3
numin2 = 3
ELSE
SKIP
ENDIF
ENDIF
ENDIF
IF numin1 = 3
IF numerobo.num2 = num1
numin2 = 1
ELSE
IF numerobo.num2 = num2
numin2 = 2
ELSE
SKIP
ENDIF
ENDIF
ENDIF
IF numin1 = 1 and numin2 = 2
IF numerobo.num3 = num3
numin3 = 3
ENDIF
ENDIF
IF numin1 = 1 and numin2 = 3
IF numerobo.num3 = num2
numin3 = 2
ENDIF
ENDIF
IF numin1 = 2 and numin2 = 1
IF numerobo.num3 = num3
numin3 = 3
ENDIF
ENDIF
IF numin1 = 2 and numin2 = 3
IF numerobo.num3 = num1
numin3 = 2
ENDIF
ENDIF
IF numin1 = 3 and numin2 = 1
IF numerobo.num3 = num2
numin3 = 2
ENDIF
ENDIF
IF numin1 = 3 and numin2 = 2
IF numerobo.num3 = num1
numin3 = 1
ENDIF
ENDIF
IF numin1 > 0 AND numin2 > 0 AND numin3 > 0
WAIT WINDOW ' NO PUEDE CARGAR REPETIDAS.'
RETURN TO cargabo1
ENDIF
ELSE
SKIP
Endif
¿Qué estoy haciendo mal?
Gracias desde ya víctor!
1 respuesta
Respuesta de Víctor Arturo Mercado Fernández
1