FoxPro/Visual FoxPro - El registro esta fuera del intervalo

   
Vista:

El registro esta fuera del intervalo

Publicado por Luis (11 intervenciones) el 17/10/2013 21:16:22
Hola amigos, tengo un formulario de Empleados, donde los agrego, modifico y elimino.
Y en el TextBox que uso para agregar la cédula del empleado tengo en el Valied,este código para que me diga si ya la cedula existe antes de agregarla:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
IF !EMPTY(THIS.VALUE)
	SELECT EMPLEADOS
	nREgis=REcno()
	LOCATE FOR CEDULA = this.value
	lcNombre=Alltrim(empleados.nombre)
	lcApellido=Alltrim(empleados.Apellido)
	lExiste=Found()
	go top
	 if !eof()
		go nREgis
	ENDIF
	 if lExiste
	 	 Messagebox("La Cédula "+LTRIM(STR(this.value))+" ya está registrada por " +lcNombre +" "+ lcApellido,0,"Aviso")
	 	 this.value=0
	 	 return 0
	 	ENDIF
ENDIF
Y me funciona bien, pero el problema se presenta luego de que elimino algún empleado y intento agregar otro nuevamente, me dice "El registro esta fuera del intervalo". Se que se puede solucionar usando como exclusiva la tabla empleados, pero si hago eso el GRID que uso para ver los empleados se quedara blanco. Alguna idea de como arreglarlo?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

El registro esta fuera del intervalo

Publicado por Saul (676 intervenciones) el 17/10/2013 23:48:12
Hola Prueba este codigo..

Usar LOCATE eso no es ua buena practica.
1
2
3
4
5
6
7
8
9
SELECT * FROM empleados;
WHERE ALLTRIM(cedula) == nBusEmple;
into ARRAY _TuTabla
 
IF _Tally > 0
	"Si Existe"
	This.value = 0
	RETURN 0
ENDIF

Saludos

Sha
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

El registro esta fuera del intervalo

Publicado por victor perez (137 intervenciones) el 18/10/2013 00:47:59
Hola,

En el codigo que envio Saul, no entiendo que es _Tally...pero yo haria el codigo asi:

SELECT * FROM empleados WHERE ALLTRIM(cedula)= nBusEmple;
INTO CURSOR _TUTABLA

IF RECCOUNT() > 0
MESSAGEBOX("La cedula ya esta en la TABLA")
RETURN 0
ENDIF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

El registro esta fuera del intervalo

Publicado por Fidel (558 intervenciones) el 18/10/2013 01:19:46
_Tally te ahorra preguntar por Reccount(). Es el número de registros procesados por la instrucción Sql.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

El registro esta fuera del intervalo

Publicado por Jose (48 intervenciones) el 18/10/2013 04:32:04
seria:
1
2
3
4
5
6
7
8
SELECT * FROM empleados;
WHERE ALLTRIM(cedula) == nBusEmple;
into ARRAY _empleados
IF _Tally > 0
	Messagebox("Si Existe")
This.value = 0
RETURN 0
ENDIF
Y que es nBusEmple?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

El registro esta fuera del intervalo

Publicado por Fidel (558 intervenciones) el 18/10/2013 14:14:02
nBusEmple=this.value && supuestamente un número de cédula.

De paso
" WHERE ALLTRIM(cedula) == nBusEmple "
Si nBusEmple es numérico porque cedula es numérico, el comparador doble igual no corresponde y menos Alltrim(cedula).
" WHERE cedula = nBusEmple "

Deduzco esto, porque cuando no se encuentra el valor, se pone This.Value=0.
De otra forma, si son caracteres, debería indicarse This.Value="" y en ese caso, sí iría Alltrim(cedula)==Alltrim(this.value)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar