Consulta sobre el uso de empty ()

1,246 views
Skip to first unread message

Marcelo Barberis

unread,
Sep 21, 2018, 11:27:35 PM9/21/18
to publicesvfoxpro
Hola buenas noches, tengo una consulta que en algunos casos la validacion la hace correcta pero otros casos no me valida
Yo tengo textbox que lo configuro con value = 0
Pero debo validar si es que escribieron algun dato en ese textbox por lo que hago lo siguiente:
IF EMPTY(THISFORM.TextBoxCedula.value)
      MESSAGEBOX("Debe escribir un nro de cedula valido",64,"Error")
      RETURN .F.
ENDIF

En algunas aplicaciones que he desarrollado esta forma me funciona como la he interpretado, es decir si no colocan nada salta el error con el mensaje.

Ahora en el ultimo sistema que he desarrollado usando esta forma y me da error, el tipo de  datos es incorrecto o algo parecido, por lo que he recurrido a usar otra alternativa validando como si es igual a 0 salta el error.

Yo pense que al poner EMPTY() tenia un alcance tanto como a textos vacios como tambien a valores 0.
Mi consulta es si el empty() que alcance tiene...?

--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

ZeRoberto

unread,
Sep 21, 2018, 11:32:24 PM9/21/18
to publicesvfoxpro
Y asi?

IF THISFORM.TextBoxCedula.value = 0
   MESSAGEBOX("Debe escribir un nro de cedula valido",64,"Error")
   RETURN .F.
ENDIF

Marcelo Barberis

unread,
Sep 22, 2018, 12:32:13 AM9/22/18
to publicesvfoxpro
bueno mi consulta basicamente era que alcance tiene empty() si a solo textos o si abarcaba a textos y valores 0.

Porque claro que en mi ultima aplicacion tuve que poner de esa forma pero en anteriores yo ponia con la funcion empty() tanto a textbox como textos y a textbox configurados con value 0

Ivan Martinez

unread,
Sep 22, 2018, 1:00:46 AM9/22/18
to publicesvfoxpro
Cero en un campo numérico no es lo mismo que cero en un campo tipo carácter.
Empty(0) da .t.
Empty("0") da .f.
Empty  ("") da  .t.

Ivan Martinez

Fidel Charny

unread,
Sep 22, 2018, 7:31:59 AM9/22/18
to Comunidad de Visual Foxpro en Español
Blob          Empty (0h) or contains only zero bytes, for example, 0h00, 0h000000, and so on
Character     Empty string, spaces, tabs, carriage returns, linefeeds, or any combination of these
Currency     0
Date         Empty, for example, CTOD('')
DateTime     Empty, for example, CTOT('')
Double       0
Float        0
General      Empty (no OLE object)
Integer      0
Logical      False (.F.)
Memo         Empty (no contents)
Numeric      0
Varbinary    Empty (0h) or contains only zero bytes, for example, 0h00, 0h000000, and so on

Fidel Charny

unread,
Sep 22, 2018, 7:38:19 AM9/22/18
to Comunidad de Visual Foxpro en Español
Para el caso de los textbox, resulta mejor lo siguiente:

? EMPTY(thisform.TexboxCedula.Text)

mapner

unread,
Sep 22, 2018, 7:58:30 AM9/22/18
to Comunidad de Visual Foxpro en Español
Me parece que se olvidan de algo
El controlar el caso de NULL
IF EMPTY(NVL(thisform.micontrol.value,''))
...
...


Víctor Hugo Espínola Domínguez

unread,
Sep 22, 2018, 12:30:13 PM9/22/18
to publice...@googlegroups.com
Algo mas importante aún es: Cualquier dato numérico que nunca será usado en operaciones aritméticas y/o matemáticas es mejor guardarlo como texto.

Saludos,
Víctor.
Lambaré - Paraguay.


Carlos Miguel FARIAS

unread,
Sep 22, 2018, 3:18:55 PM9/22/18
to Grupo Fox
Dato numérico, guardarlo como numérico. Porque es más eficiente su almacenamiento, y su indexado. En MySQL, por ejemplo, puedes guardar números de 0 a 255 en  un solo byte, o algo más de 65000 en 2 bytes o algo más de 4 mil millones (10 dígitos) en 4 bytes.
Entonces dato numérico es dato numérico, y es consistente.
Si guardas un número como texto, como lo guardas? Supongamos hasta 3 dígitos. Quiero guardar el 7. Guardo '7', ' 7  ', '07 ', '  7', '007', etc. En todos los casos es 7, pero si buscas por igualdad, mayor o menor, las respuestas pueden ser cualquier cosa.
En Fox nos acostumbramos a usar EMPTY(), porque no existía el dato NULL, pero no es lo mismo una string (cadena) vacía que Null, no es lo mismo 0 que null, el promedio de 10, 5 y 0 es 5. El promedio de 10, 5 y null es 7,5.
Las máscaras de fox nos permiten determinar que se tipea dentro de un campo. Pero lo correcto antes de activar el formulario es poner cada campo con un valor "correcto" por omisión.
Salvo con el uso de buffers, los controles asociados a datos deberían estar en relación a variables de memoria o propiedades del formulario. Correctamente inicializadas.
Saludos: Miguel.

Víctor Hugo Espínola Domínguez

unread,
Sep 22, 2018, 8:48:14 PM9/22/18
to publice...@googlegroups.com
Probablemente fui muy extremista en mi afirmación, pero los números telefónicos deben guardarse como texto, no se en otros países pero en el mío cada ciudad tiene un prefijo que empieza con cero:
ASUNCIÓN  021
ACAHAY      0535
ALBERDI     0780
AREGUA     0291
Y como pueden notar no tiene una longitud fija.  

Saludos,
Víctor.
Lambaré - Paraguay.


Alejandro Isla

unread,
Sep 23, 2018, 9:15:49 AM9/23/18
to Comunidad de Visual Foxpro en Español
Una pregunta respecto a validar el NULL ¿como hace un operario para ingresar un .NULL. en un texbox?, como en este caso que indica que inicializa a 0. Distinto a inicializar con una variable / campo que puede traer el null y uno dar enter.

Saludos.

Alejandro Isla

unread,
Sep 23, 2018, 9:17:59 AM9/23/18
to Comunidad de Visual Foxpro en Español
(era para este post la pregunta, disculpas Fidel).
Una pregunta respecto a validar el NULL ¿como hace un operario para ingresar un .NULL. en un texbox?, como en este caso que indica que inicializa a 0. Distinto a inicializar con una variable / campo que puede traer el null y uno dar enter.

Saludos.



Saul Piña Hernandez

unread,
Sep 23, 2018, 9:42:25 AM9/23/18
to Comunidad de Visual Foxpro en Español
empty() caracteres
Value=0 enteros

punto.

mapner

unread,
Sep 23, 2018, 9:49:36 AM9/23/18
to Comunidad de Visual Foxpro en Español
Alejandro Isla,
No es que ingresen manualmente valores nulos en un textbox, sino que los campos pueden ser leídos desde una base de datos o bien variables inicializadas con NULL y expuestos en esos Textbox

Dsan

unread,
Sep 23, 2018, 1:22:29 PM9/23/18
to publice...@googlegroups.com
if len(Thisform.txtcodigo.value) > 0 Then     &&&  or ISNULL() ambos a la vez si el resultado viene de un cursor.campo.

Y porqu no asi?[

Slds
Dsanchez

Fidel Charny

unread,
Sep 24, 2018, 9:55:41 AM9/24/18
to Comunidad de Visual Foxpro en Español
Está claro que existe la posibilidad de validar los campos del cursor asociado (si lo hay). Pero no siempre hay un cursor asociado.
Si el valor es NULL, empty() dará .F.

Mik

unread,
Sep 24, 2018, 9:57:22 AM9/24/18
to Comunidad de Visual Foxpro en Español
Para ingresar un valor null en un control Textbox presiona las teclas "Ctrl + 0".

Saludos

Miguel Herbias
Lima-PERU

Fidel Charny

unread,
Sep 24, 2018, 10:28:27 AM9/24/18
to Comunidad de Visual Foxpro en Español
Porque solo aplica a campos caracter
Se podría hacer evaluando la propiedad Text del control textbox. Acá se quitan los espacios y los caracteres "/" y ":" que podrían contener los campos date o datetime.
IF ISNULL(thisform.TxtCodigo.Value) ;
    OR EMPTY
(LEN(CHRTRAN(Thisform.TxtCodigo.Text,CHR(32)+CHR(47)+CHR(58),"")))
    MESSAGEBOX
("El campo Código está vacío")
    thisform
.txtCodigo.SetFocus
ENDIF


Alejandro Isla

unread,
Sep 27, 2018, 9:55:51 PM9/27/18
to Comunidad de Visual Foxpro en Español
Con perdón de los precentes, creo que nadie leyó lo que plantea el primer post y a nadie le llamó la atención que se diga:
"y me da error, el tipo de  datos es incorrecto o algo parecido", ta como indicaron y reproduzco, empty() abarca todos los tipos de datos del fox, por lo que no tendría que dar error usemos .value, .text o sea un 0 numérico o texto (dará la respuesta adecuada .t. o .f. en cada caso).

Por lo que entiendo la ¿única? forma que empty() de dicho mensaje de error, es cuando se le pide valuar un objeto.

Por lo que estimo que en este caso, hay un error más profundo, o se olvidó de poner el .value al final del objeto textbox (con lo se genera dicho error) o por alguna falla en el programa se está asignando erróneamente un objeto a dicho textbox (¿se podría, cierto?).

¿alguno conoce otra forma de que empty() de un mensaje de error tipo de  datos es incorrecto?

Imagen de empty(thisform)

Saludos.

Expression type Evaluates to

Alejandro Isla

unread,
Sep 27, 2018, 9:57:24 PM9/27/18
to Comunidad de Visual Foxpro en Español
Perdón por la primer frase, la leo publicada y suena distinta a mi intención.
Saludos.

HernanCano

unread,
Sep 28, 2018, 2:45:22 AM9/28/18
to Comunidad de Visual Foxpro en Español
Marcelo:

La función EMPTY() sí funciona como indicas en tu pregunta (tanto para un campo de caracteres vacío, como para valores numéricos en cero).

Si el mensaje de error es"Tipo de datos incorrecto", entonces debe ser en otra instrucción, no en "IF EMPTY(THISFORM.TEXTBOXCEDULA.VALUE)"


>>> Mi consulta es ... el empty() qué alcance tiene...?

Considero que la respuesta de Alejandro debe aclararte esta pregunta.

Marcelo Barberis

unread,
Sep 28, 2018, 4:24:23 AM9/28/18
to publicesvfoxpro
hola buenas noches, bueno ante que nada gracias por tomarse el tiempo de enviar comentarios y bueno lo que uso en mis aplicativos es bd mysql por lo que los textbox lo configuro en los names con el nombre del campo de la tabla y configuro el Value en el caso ser numerico el campo le pongo 0 si es texto el campo pues no pongo nada y asumo que sera de tipo text y si es el campo de tipo date pues en el value {}. Ahora en algunos aplicativo he tenido que validar el ingreso de datos antes de guardar, es decir si deseo que no se olviden de colocar el nro de ci, que es un campo de tipo numerico y asi otros yo ponia una validacion:

IF EMPTY(THIS.Nro_Ci.Value)
        MESSAGEBOX("Nro de Cedula invalido. Revise")
        THIS.Nro_Ci.SetFocus()        
       RETURN .F.
ENDIF

De esta manera me daba lo que esperaba, ahora en un sistema que hice puse lo mismo pero claro con otro campo pero usando un campo numerico en la validacion del empty() y me marcaba error, como si evaluara a un campo text y al ser numerico salta el error, por lo que cambie la forma y ya lo use con una evaluacion == 0








Alejandro Isla

unread,
Sep 28, 2018, 8:50:04 AM9/28/18
to Comunidad de Visual Foxpro en Español
Sería posible que copies el bloque de código cuando te generaba error, porque me intriga realmente que te genere error; sería esos casos que debe andar  pero no anda,  que te hacen doler la cabeza.

Saludos.
Reply all
Reply to author
Forward
0 new messages