FoxPro/Visual FoxPro - no permitir dejar campos en blancos

   
Vista:

no permitir dejar campos en blancos

Publicado por Luis (11 intervenciones) el 08/07/2013 01:36:36
Como hago para no permitir dejar campos en blancos al ingresar valores a una tabla. Es decir, que si se deje un campo en blanco mande un mensaje "No dejes campos en blancos".
Intente hacerlo en una formulario con una tabla "empleados", con la siguiente estructura de aca abajo pero no me funciona:
1
2
3
4
5
6
7
8
9
nom = thisform.txtnombre.Text
ape = thisform.txtapellido.Text
ced = thisform.txtcedula.value
tlf = thisform.txttelefono.Value
IF (nom = "") or (ape = "") or (ced = 0) OR (tlf = 0) then
      MESSAGEBOX("Por favor llena todos los capos")
ELSE
     INSERT INTO empleados(nombre,apellido,cedula,telefono) VALUES (nom,ape,ced,tlf)
ENDIF
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

no permitir dejar campos en blancos

Publicado por many (332 intervenciones) el 08/07/2013 04:07:59
Saludo a todos ,

Si quiere puede simplificarlo de esta forma:

if empty(thisform.txtnombre.Text)
messagebox("mensage a enviar")
endif

if thisform.txtnombre.Text = " "
messagebox("mensage a enviar")
endif

Yo particularmente trabajo con textbox ya que asi encuentro que tengo un mejor control sobre el formulario, si tiene experiencia positiva usando directamente los compos de la tabla en el form. te lo agradezco. Cuando programaba en delphi lo hacia asi pero qui con un simple post a la tabla guardaba todo.

Perdona el comentario pero es que queremos aprender mas.

Adiós.
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

no permitir dejar campos en blancos

Publicado por Fidel (558 intervenciones) el 08/07/2013 15:14:37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
* 1 - Cuadro por cuadro
nom = alltrim(thisform.txtnombre.Text)
ape = alltrim(thisform.txtapellido.Text)
ced = thisform.txtcedula.value
tlf = thisform.txttelefono.Value
 
*  IF (nom = "") or (ape = "") or (ced = 0) OR (tlf = 0) then
 
if empty(nom).or.empty(ape).or.empty(ced).or.empty(tlf)
      MESSAGEBOX("Por favor llena todos los capos")
ELSE
     INSERT INTO empleados(nombre,apellido,cedula,telefono) VALUES (nom,ape,ced,tlf)
ENDIF
 
* 2 - Rutina global (básica)
*************************
* Supone que todos los cuadros de texto Enabled=.t. deben tener datos.
* En este ejemplo no se consideran Container y PageFrame, pero se puede ampliar
* con un esquema recursivo.
*
FOR EACH ocontrol in thisform.controls
	IF INLIST(Upper(baseclass)),"TEXTBOX","EDITBOX")
		IF ocontrol.enabled.and.EMPTY(ocontrol.value)
			ocontrol.setfocus  && enfoca el cuadro sin datos
			RETURN
		ENDIF
	ENDIF
ENDIF
insert into empleados (nombre,apellido,cedula,telefono);
	values (thisform.txtNombre.value,;
		thisform.txtApellido.value,;
		thisform.txtCedula.value,;
		thisform.TxtTelefono.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

no permitir dejar campos en blancos

Publicado por Luis (11 intervenciones) el 08/07/2013 21:56:48
Fidel, gracias por tu ayuda me funciono muy bien. Pero tengo una duda, hay alguna manera de que tampoco me permita ingresar cedulas iguales dentro de la tabla? es decir, que al intentar ingresar una cedula que ya existe en la tabla mande un mensaje "ya la cedula existe".?
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

no permitir dejar campos en blancos

Publicado por Fidel (558 intervenciones) el 09/07/2013 17:48:48
Luis, debe utilizar el evento Valid de thisform.txtcedula.value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
* Evento Valid
* Suponiendo que no hay índice sobre el campo CEDULA
IF !EMPTY(THIS.VALUE)
        SELECT EMPLEADOS
        nREgis=REcno()
        LOCATE FOR TRIM(CEDULA)==ALLTRIM(THIS.VALUE)
        lExiste=Found()
        go top
         if !eof()
                go nREgis
          endif
          if LEXSISTE
               Messagebox("Cédula "+this.value+" ya está grabada " +trim(empleados.nombre),0,"Aviso")
               this.value=0
               return 0
          ENDIF
ENDIF
 
* EVENTO VALID
* SUPONIENDO QUE LA TABLA TIENE UN INDICE POR CEDULA
* INDEX ON CEDULA TAG EMP_CED
IF !EMPTY(THIS.VALUE)
          IF INDEXSEEK(THIS.VALUE,.F.,"EMPLEADO","EMP_CED")
                  Messagebox("Cédula "+this.value+ " ya grabada",0,"Aviso")
                  this.value=0
                  return 0
           ENDIF
ENDIF
* INDEXSEEK(quebusco, .F., TABLA, INDICE) no mueve el puntero de registro.
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

no permitir dejar campos en blancos

Publicado por Luis (11 intervenciones) el 12/07/2013 00:29:34
Amigo, Fidel. No hay índice sobre el campo CEDULA, coloque el código tal cual me lo indicaste en el Evento Valid y observa el error que me da:
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

no permitir dejar campos en blancos

Publicado por Fidel (558 intervenciones) el 12/07/2013 22:18:48
Perdón Luis, no sé porqué se me ocurrió que era un campo character, si tu preguntas por ahí por "Ced=0" y además (por si fuera poco), le pongo This.value=0 para el caso en que lo encuentre.
Disculpas por la pifia y ahí va corregido.
* trim quita espacios a la derecha de la cadena. Alltrim a la derecha y a la izquierda. Siempre de una cadena. Si le pongo Trim(nValor) ó Alltrim(nValor) salta error.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
IF !EMPTY(THIS.VALUE)
        SELECT EMPLEADOS
        nREgis=REcno()
        LOCATE FOR CEDULA = this.value
        lExiste=Found()
        go top
         if !eof()
                go nREgis
          endif
          if LEXSISTE
               Messagebox("Cédula "+LTRIM(STR(this.value))+" ya está grabada " +trim(empleados.nombre),0,"Aviso")
               this.value=0
               return 0
          ENDIF
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

no permitir dejar campos en blancos

Publicado por Luis (11 intervenciones) el 12/07/2013 23:10:20
Gracias, Fidel me funciono. Aunque te cuento que al arrojar el mensaje "Cédula X ya está grabada NombreX", existe un pequeño inconveniente de que "NombreX" arroja es el nombre del primer registro de la tabla y no el que coincida segun la cedula.
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

no permitir dejar campos en blancos

Publicado por Fidel (558 intervenciones) el 13/07/2013 00:30:58
Si, claro, con go top estaba leyendo el primero.
Ahora colocando una variable (lcNombre) después del locate, debería solucionarse. Si está en Eof() (no lo encuentra), lcNombre será un string vacío.
Si es Found(), entonces lcNombre tendrá el nombre del empleado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IF !EMPTY(THIS.VALUE)
        SELECT EMPLEADOS
        nREgis=REcno()
        LOCATE FOR CEDULA = this.value
       lcNombre=Alltrim(empleados.nombre)
        lExiste=Found()
        go top
         if !eof()
                go nREgis
          endif
          if LEXSISTE
               Messagebox("Cédula "+LTRIM(STR(this.value))+" ya está grabada " +lcNombre,0,"Aviso")
               this.value=0
               return 0
          ENDIF
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