Validar datos en tabla

Hola

Quiero que no me acepte registros duplicados con el mismo año lectivo. Por ejemplo

Numero Año Lectivo

00000001 2012

00000001 2012

1 respuesta

Respuesta
1

Debes crear un indice único o principal en la tabla que seria un indice compuesto año+código, y antes de adicionar el registro y si al indice le pusiste el nombre anocodigo buscas así:

Si el año el carácter:

lcCadena=año+código

si es numerico

lcCadena=ALLT(STR(año))+codigo

nFind=Seek(lcCadena,"mitabla","anocodigo")

If nFind

=MessageBox("Registro ya existe",64,"Error")

Return

Endif

Tengo en la tabla Inscripción un indice normal y con nombre de indice numero y

resulta que la tabla debe de aceptar código repetidos, pero no debe de aceptar años lectivos repetidos.

Supongo que el código sería diferente.

Debes crear un indice principal o único compuesto por año+código:

USE inscripción

Si es caracter

INDEX ON añolectivo+código TAG anolec UNIQUE

Si es numérico

INDEX ON ALLTRIM(STR(añolectivo, 4))+código TAG anolec UNIQUE

Y de allí si aplicas el algoritmo de arriba.

DEbe de aceptar los registros siguientes:

Numero Año Lectivo

00000001 2012

00000002 2012

00000003 2012

No debe de Aceptar registros:

Numero Año LEctivo

00000001 2011

00000001 2011

00000002 2012

00000002 2012

Si eso es lo que yo te digo.

Si para eso sirve el indice único compuesto que te dije.

Debe de Aceptar:

00000001 2009

00000002 2009

00000001 2010

00000002 2010

00000001 2011

00000002 2011

00000001 2012

00000002 2012

1. El indices lo debes crear por fuera del formulario, en una rutina reindexar o en la ventana de comandos.

2. Ya te había dicho que el cursor lo cierras con USE IN micursor.

Me muestra un error en:

USE Inscripción

Me dice que la tabla esta en uso.

Sera porque tengo un cursor abierto

¿Donde cierro el cursor para que no me muestre este error?

Pues obviamente debes declarar esa variable antes de usarla en tu búsqueda, porque no miras todo lo que yo te he dicho arriba, se un poco mas recursivo.

Error. Me dice que no se encuentra la variable

lcCadena

Pero estas buscando en el indice NIE, debes crear un indice aparte compuesto y único con el INDEX que se llame LECNIE por ejemplo, buscar en este indice

nFind=Seek(cCadena,"Inscripción","LECNIE")

ESte es es el código que tengo

LOCAL cCadena
cCadena = 0
SELECT Inscripción
cCadena=ALLTRIM(STR(Lec))+ Nie
nFind=Seek(cCadena,"Inscripción","Nie")
If nFind
=MessageBox("Registro ya existe",64,"Error")
Return
Endif

Pero siempre me lo acepta.

LOCAL cCadena
cCadena = 0
SELECT Inscripción
cCadena=ALLTRIM(STR(Lec))+ Nie
nFind=Seek(cCadena,"Inscripción","anolec")
If nFind
=MessageBox("Registro ya existe",64,"Error")
Return
Endif

anolec: Es el indice compuesto que he creado con las instrucciones que me diste.

No me muestra el mensaje cuando lo pruebo.

Verifica la longitud del campo lec y el tipo que sea N(4) o C(4) y la búsqueda también la haces con el ALLTRIM()

nFind=Seek(ALLTRIM(cCadena),"Inscripción","anolec")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas