Problema con código de validación

Hola

resulta que este código que te muestro a continuación me funciona para que no acepte registros duplicados.

No acepta

NIE LEC

000000001 2011

00000001 2011

Pero el error es que no acepta registros

NIE LEC

00000001 2012

00000001 2013

lo cual debería de aceptarlos.

LOCAL cCadena
cCadena = 0
SELECT Inscripción
cCadena=ALLTRIM(STR(Thisform.TxtLec.Value))+ Nie
nlFound=SEEK(ALLTRIM(cCadena),"Inscripción","LecNie")
If nlFound
=MessageBox("El año lectivo que intenta ingresar ya existe para este alumno",64,"Error")
RETURN
ELSE
ENDIF

LECNIE : Es un indice único de 4 de longitud y numérico.

1 Respuesta

Respuesta
1

no uses seek, hazlo con un select :

cNie = thisform.txtnie.value

nlect = thisform.txtlec.value

select * from inscripcion where alltrim(nie) == alltrim(cNie) and lec = nlect into cursor cExiste

select cExiste

if reccount() > 0

=MessageBox("El año lectivo que intenta ingresar ya existe para este alumno", 64,"Error")

Endif

Basicamente con eso podrias solucionar, cualquier duda me comentas, suerte

me muestra el mensaje le aplique el RETURN 0 pero siempre me lo guarda.

como soluciono esto.

¿Exactamente cómo pusiste el código? ¿Y en que evento?

cNie = (thisform.txtnie.value)
nlect = (thisform.txtlec.value)
select * from inscripción where alltrim(nie) == alltrim(cNie) and lec = nlect into cursor cExiste
select cExiste
if reccount() > 0
=MessageBox("El año lectivo que intenta ingresar ya existe para este alumno",64,"Error")
RETURN 0
endif

en el botón guardar del evento click

Pues esta ok, ¿pero dime algo el proceso de grabar lo pusiste después del endif?

si, esta después del Endif.

Pero cual será el problema.

Justamente eso que esta después del endif osea siempre va a grabar, debes quitar ese return 0 y todo el código de grabar debes ponerlo por el ELSE de la pregunta osea

if reccount() > 0

messagebox("existe")

else

**proceso para grabar

Endif

Y ahí te debe funcionar sin problemas

solucioné el problema anterior, pero me surge otro.

resulta que me pide que abra la tabla porque me muestra el cuadro de dialogo para abrirla.

Es que mínimo en el proceso de grabar usas append blank y no tienes un select nombre_tabla que te indique que es en esa tabla donde vas a agregar el nuevo registro, y pues un consejo usa el INSERT- SQL

un pequeño ejemplo usando el INSERT.

cNie = thisform.txtnie.value
nlect = thisform.txtlec.value

insert into inscripcion(nie,lec) values(cnie,nlect)

Con ese codigo insertas y no usas append blank ni replace ni tienes que hacer un select nombre_tabla

este es el código:

cNie = (thisform.txtnie.value)
nlect = (thisform.txtlec.value)
insert into inscripción(nie,lec) values(cnie,nlect)
select * from inscripción where alltrim(nie) == alltrim(cNie) and lec = nlect into cursor cExiste
select cExiste
if reccount() > 0
=MessageBox("El año lectivo que intenta ingresar ya existe para este alumno",64,"Error")
ELSE
Thisform.Guardar

endif

pero siempre me muestra el cuadro de dialogo abrir.

Si pero en ThisForm. Guardar al inicio debes poner un Select nombre_tabla que le indique que vas a insertar datos en dicha tabla, porque te sale el cuadro de dialogo ya que el programa espera alguna tabla y al no indicarle una pues te muestra ese cuadro

el problema no es así, sino que me muestra el cuadro de dialogo antes de mostrarme el mensaje de validación. Una vez que selecciono la tabla aparece el mensaje.

¿Estas ubicando bien todos los nombres de las tablas? Ubica messagebox antes de que haga el select * from inscripción para que así sepas exactamente en que linea es que te esta dando el problema

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas