Página 1 de 1

Comportamiento ERRONEO

Publicado: Mié Feb 03, 2010 10:15 am
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

Comportamiento ERRONEO

Publicado: Mié Feb 03, 2010 12:05 pm
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

Comportamiento ERRONEO

Publicado: Mié Feb 03, 2010 12:55 pm
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.
>