In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Comportamiento ERRONEO

Foro público de Xailer en español
Responder
aureliano.sanchezc
Mensajes: 24
Registrado: Jue Ene 21, 2010 2:45 pm

Comportamiento ERRONEO

Mensaje por aureliano.sanchezc »

Buenos dias
¿ Alguien podria decirme porque la comparacion de == y != arrojan el
mismo resultado en el mismo momento de evaluación ?
Dicho de otra forma el primer codigo no funciona correctamente y he
debido adaptarlo al segundo codigo para que funcione cambiando el tipo
de comparacion y teniendo que generar un IF vacio para poder utilizar la
rama del ElSE
¿Alguna explicación?
Codigo que no funciona
IF (::nRegistros != ::oMaskEdit1:Value) .OR. (::cFiltro1 !=
::oMaskEdit2:Value) .OR. (::cFiltro2 != ::oMaskEdit3:Value)
::nRegistros := ::oMaskEdit1:Value
::cFiltro1 := ::oMaskEdit2:Value
::cFiltro2 := ::oMaskEdit3:Value
WITH OBJECT ::oSQLQuery1 // Abrimos el cursor.
IF :lOpen == .T.
:lOpen := .F.
ENDIF
:cSelect := "SELECT TOP " + ALLTRIM(STR(::nRegistros,5,0)) +
cSelect
:lOpen := .T.
END WITH
ENDIF
Codigo adaptado para que funcione
IF (::nRegistros == ::oMaskEdit1:Value) .AND. (::cFiltro1 ==
::oMaskEdit2:Value) .AND. (::cFiltro2 == ::oMaskEdit3:Value)
ELSE
::nRegistros := ::oMaskEdit1:Value
::cFiltro1 := ::oMaskEdit2:Value
::cFiltro2 := ::oMaskEdit3:Value
WITH OBJECT ::oSQLQuery1 // Abrimos el cursor.
IF :lOpen == .T.
:lOpen := .F.
ENDIF
:cSelect := "SELECT TOP " + ALLTRIM(STR(::nRegistros,5,0)) +
cSelect
:lOpen := .T.
END WITH
ENDIF
Gracias de antemano
Un saludo
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Comportamiento ERRONEO

Mensaje por jfgimenez »

Aureliano,
me temo que es una limitación del propio compilador xHarbour, que no permite
utilizar el operador != con los objetos. Es decir, la expresión:
oObj1 != oObj2
siempre da como resultado .T.. Para comprobar si dos objetos son iguales o
distintos hay que utilizar siempre el operador == (dos signos igual). P.ej.:
oObj1 == oObj2 // Comprobar si son iguales
.NOT. ( oObj1 == oObj2 ) // Comprobar si son distintos
Esto sólo ocurre con los objetos. Cualquier otro tipo de dato funciona
correctamente, eso sí­, teniendo en cuenta que al comparar dos cadenas con =
o != entra en escena el valor de SET EXACT, lo mismo que en Clipper.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
aureliano.sanchezc
Mensajes: 24
Registrado: Jue Ene 21, 2010 2:45 pm

Comportamiento ERRONEO

Mensaje por aureliano.sanchezc »

Jose F. Gimenez,
Gracias por la aclaración
Un saludo
Jose F. Gimenez escribió:
> Aureliano,
>
> me temo que es una limitación del propio compilador xHarbour, que no
> permite utilizar el operador != con los objetos. Es decir, la expresión:
>
> oObj1 != oObj2
>
> siempre da como resultado .T.. Para comprobar si dos objetos son iguales
> o distintos hay que utilizar siempre el operador == (dos signos igual).
> P.ej.:
>
> oObj1 == oObj2 // Comprobar si son iguales
> .NOT. ( oObj1 == oObj2 ) // Comprobar si son distintos
>
> Esto sólo ocurre con los objetos. Cualquier otro tipo de dato funciona
> correctamente, eso sí­, teniendo en cuenta que al comparar dos cadenas
> con = o != entra en escena el valor de SET EXACT, lo mismo que en Clipper.
>
Responder