Comprobar si un objeto existe

3,326 views
Skip to first unread message

calichy

unread,
Sep 11, 2010, 6:43:30 PM9/11/10
to Comunidad de Visual Foxpro en Español
Amigos mi problema es que en un form creo un objeto publico el cual le
paso por parametros algunos datos pero necesito saber como comprobar
si ese objeto existe en un form.

public mi_objeto
mi_objeto=createobjetc("miclase")

de esta forma creo el objeto, claro previamente ya he creado la clase
de tipo "miclase" . Espero haberme explicado y que alguien me pueda
ayudar.

Anticipadamente agradesco sus ayuda y comento que hay gente muy buena
este foro hablando profesinalmente.

fputignani

unread,
Sep 11, 2010, 7:23:58 PM9/11/10
to Comunidad de Visual Foxpro en Español
Hace poco pregunte algo parecido y me diero esta idea:


IF vartype(form.mi_objeto) = "O" THEN
&&Comandos
ENDIF

Walter R. Ojeda Valiente

unread,
Sep 11, 2010, 9:32:07 PM9/11/10
to publice...@googlegroups.com
Hola Calichy

La forma más sencilla es averiguando el tipo de tu objeto. Si las funciones TYPE() o VARTYPE() te devuelven "O", significa que el objeto existe. Algo como:

IF TYPE("MIOBJETO") == "O"     && El objeto sí existe

Saludos.

Walter.

Victor Espina

unread,
Sep 13, 2010, 12:51:13 PM9/13/10
to Comunidad de Visual Foxpro en Español
VARTYPE() es mas rapida que TYPE() y funciona tambien para variables
que no existen:

IF VARTYPE(miObjeto)="U"
PUBLIC miobjeto
...
ENDIF


Saludos

Victor Espina

JesusQuin

unread,
Feb 2, 2020, 7:45:30 PM2/2/20
to Comunidad de Visual Foxpro en Español
Hola todos, vartype(eExp) presenta fallas.
? vartype(o.Name)  && Error: Alias 'O'is not found.
? type('o.Name')  && muestra 'U'

Saludos Jesús

Luis suescún

unread,
Feb 2, 2020, 8:27:35 PM2/2/20
to publice...@googlegroups.com
La función Type.

If Type("nombrrobjeto")="O" 
     Wait "si es un objeto"
Else
      Wait "no es un objeto"



--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/ed8bf968-3357-4122-9899-c5e08a31f313%40googlegroups.com.

JesusQuin

unread,
Feb 3, 2020, 6:07:18 AM2/3/20
to Comunidad de Visual Foxpro en Español
Hola luisandreey, si, la función type() funciona correctamente, no genera un error cuando el objeto no existe, la que no lo hace bien es vartype(), nunca debería levantar un error.

Saludos, Jesús


El domingo, 2 de febrero de 2020, 20:27:35 (UTC-5), luisandrey escribió:
La función Type.

If Type("nombrrobjeto")="O" 
     Wait "si es un objeto"
Else
      Wait "no es un objeto"



El dom., 2 feb. 2020 19:45, JesusQuin <jesus...@gmail.com> escribió:
Hola todos, vartype(eExp) presenta fallas.
? vartype(o.Name)  && Error: Alias 'O'is not found.
? type('o.Name')  && muestra 'U'

Saludos Jesús

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publice...@googlegroups.com.

Luis suescún

unread,
Feb 3, 2020, 6:37:29 AM2/3/20
to publice...@googlegroups.com
Quieres usar vartype ?


Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/09bf7066-df9c-42c2-9e39-6046ea910041%40googlegroups.com.

ArturoPC

unread,
Feb 3, 2020, 10:21:22 AM2/3/20
to Comunidad de Visual Foxpro en Español
En realidad para mí VARTYPE es mejor que TYPE. Empezando por como se envía el parámetro. En TYPE se envía entre comillas, lo que rompe el estándar de los parámetros, ya que si se envía así debería ser siempre caracter. En VARTYPE, funciona como en cualquier parámetro, pones la variable directa, y si usas comillas es una cadena.

Ahora, el comportamiento en el ejemplo que ponen es correcto en VARTYPE y no en TYPE, al contrario de lo que se menciona.

¿Por qué? Si quieres evaluar la existencia de un objeto, en este caso llamado o, pues solo debes hacer referencia al objeto, no a una de sus propiedades. Así, si pones VARTYPE(o) te devolverá U; pero si pones VARTYPE (o.Name) lo que estás evaluando es la propiedad "Name" del objeto "o" y es correcto el error que te devuelve: "No existe el objeto o". Ahora, si existe el objeto o ahí sí te devolverá el tipo de variable que es o.name o U si no existe.

TYPE("o.Name") se comporta raro, si funcionara como la lógica lo requiere debería dar el mismo error de VARTYPE, aunque -como dije líneas arriba- esas comillas son bien fastidiosas; yo ahí veo una cadena. En fin, puedes usar cualquier a tu gusto, pero creo que lo ideal es trabajar de la misma forma con todos tus comandos y funciones.

Arturo PC.

JesusQuin

unread,
Feb 4, 2020, 11:32:03 AM2/4/20
to Comunidad de Visual Foxpro en Español
Hola Arturo, gracias por responder.
Mi intención es solo reportar el bug, por que encontré esto que fue posteado en el 2010 y no había mención al respecto.
 Y no concuerdo con tu apreciación de que es correcto que devuelva un error, es un "bug" por que no hace lo que se espera de acuerdo con la documentación, que traducido dice: "Devuelve el tipo de dato de una expresión" y según la sintaxis: "VARTYPE(eExpression [, lNullDataType])" y si observas bien (e)Expression, la letra (e) indica que puede ser una expresión cualquiera, incluso una expresión no válida en VFP, tal cual como si  lo hace "TYPE(cExpression [, 1]), mira este ejemplo: type("'80%"), la única salvedad que existe es sobre el "ARRAY", no mención alguna relacionada con propiedades de objetos, además, estas funciones están en el leguaje precisamente para evitar el error no para provocarlo.

Debido al "bug" tuve que cambiar esto:
vartype(m.oIE.document.querySelector('input[class="gLFyf gsfi"]'))
por esto otro:
type("m.oIE.document.querySelector('input[class="+'"gLFyf gsfi"'+"]')")

saludos, Jesús

ArturoPC

unread,
Feb 4, 2020, 1:13:32 PM2/4/20
to Comunidad de Visual Foxpro en Español
Hola Jesús.

En este caso que pones, si quieres evaluar la existencia del objeto basta con que pongas VARTYPE(oIE), y esto porque así se llama el objeto, lo demás son propiedades del objeto pero no el objeto en sí mismo.

Saludos.

Arturo PC.

Fidel Charny

unread,
Feb 4, 2020, 6:28:12 PM2/4/20
to Comunidad de Visual Foxpro en Español
Son dos pasos

IF VARTYPE(O) = "O"
     IF PEMSTATUS(O,"Name",5)

También
IF VARTYPE(O) = "O" AND PEMSTATUS(O,"Name",5)

Luis suescún

unread,
Feb 4, 2020, 7:14:08 PM2/4/20
to publice...@googlegroups.com
Volvió Fidel...
Estabas ausente 

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/568f9baa-c4c5-4eb1-b8ed-c1a01141ca61%40googlegroups.com.

JesusQuin

unread,
Feb 5, 2020, 11:13:55 AM2/5/20
to Comunidad de Visual Foxpro en Español
Hola todos, gracias por participar.

En vartype(m.oIE.document.querySelector('input[class="gLFyf gsfi"]')) cada componente es un objeto, y el único que con certeza existe es {oIE} es una instancia de IE 11, {document} y {querySelector('input[class="gLFyf gsfi"]')} también lo son, y pueden o (no) llegar a existir, y como "vartype" tiene problemas con objetos ya no es un problema sino dos, sin embargo haré algunas pruebas como lo indica Fidel para verificar el rendimiento.

Saludos, Jesús
Reply all
Reply to author
Forward
0 new messages