Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-04-2014
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 16
pacopenin Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje

Código Delphi [-]

     If Not  ((Name='FCat') Or (Name='FUsu') or (name='FConcepto') or (Name='FFormaPago')) then

    {Aquí estas evaluando la negación de True, que es False, por lo tanto se cumple la condición del IF}
Gracias por el comentario cloayza, pero no puedo estar de acuerdo con lo que comentas. Ese razonamiento a mi no me encaja, sino
esto no funcionaría así ¿no?



Saludos,
__________________
http://www.gestionportable.com
Responder Con Cita
  #2  
Antiguo 18-04-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
pacopenin,

Cita:
Empezado por pacopenin
...sino esto no funcionaría así ¿no?...
Es correcto

Nelson
Responder Con Cita
  #3  
Antiguo 18-04-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Según las leyes de Augustus De Morgan,

1) La negación de la conjunción es la disyunción de las negaciones. -(A ^ B) = -A v -B
2) La negación de la disyunción es la conjunción de las negaciones. -(A v B) = -A ^ -B

1)
Código Delphi [-]
  if not(A and B) then 
  // es equivalente a:
  if not A or not B then
2)
Código Delphi [-]
  if not (A or B) then 
  // es equivalente a:
  if not A and not B then

Por lo tanto la expresión:
Código Delphi [-]
  if not((Name='FCat')or(Name='FUsu')or(name='FConcepto')or(Name='FFormaPago')) then
  // es equivalente a:
  if not (Name='FCat') and not (Name='FUsu') and not(Name='FConcepto') and not (Name='FFormaPago') then
  // o mas comúnmente:
  if (Name<>'FCat')and(Name<>'FUsu')and(Name<>'FConcepto')and(Name<>'FFormaPago') then

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 18-04-2014
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 16
pacopenin Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje

Código Delphi [-]
  if (Name<>'FCat')and(Name<>'FUsu')and(Name<>'FConcepto')and(Name<>'FFormaPago') then
Recuperando código de SVN se puede ver que probé de varias formas antes de darme por vencido.




Por mi experiencia, como ya comenté, decidí no dar demasiadas vueltas y atacar la solución desde otro punto de vista. La cuestión no es tanto como expresar la condición sino que, a partir de los valores que se ven en la pantalla de depuración, la instrucción if funciona de forma anómala. No se si es un bug o un funcionamiento que se me escapa, pero como ya comenté, en mis casi 20 años de desarrollo con Delphi desde la versión 1.0, me he encontrado otras dos veces con esta anomalía. La anterior vez creo recordar que estaba relacionado con un valor (boolean) devuelto por una función y recuerdo que perdí mucho tiempo tratando de dilucidar porque un valor false hace que se ejecute el código correspondiente a verdadero del if.

Saludos,
__________________
http://www.gestionportable.com
Responder Con Cita
  #5  
Antiguo 18-04-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola pacopepin.

La condición del código de tu primer mensaje, está correctamente definida y tendría que funcionar del mismo modo para las diferentes formas de expresarlo, eso quería resaltar en el mensaje anterior.

Nunca me ha sucedido antes (o no me enteré ) y luego de leer tu mensaje traté de forzar el caso con Delphi 7 de varios modos sin lograrlo, lo que era de esperar ya que comentas que sólo te ocurrió tres veces en tanto tiempo.

Creo que la causa mas plausible es la que sugiere Casimiro en el mensaje #3. Tal vez el compilador tratando de optimizar el código, en algunas condiciones, cambie la lógica del predicado.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 19-04-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
O algo mas. El código compilado no es el mismo al código escrito -por ejemplo, un cambio que se le hizo y luego el compilador no refresco ese cambio-. Eso me ha pasado en Delphi, .NET, Obj-C, Python por multiples razones. EL chiste seria ver que muestra el ensamblador.
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 19-04-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
pacopenin,

Cita:
Empezado por pacopenin
...al evaluar un if...la condición devuelve falso y está ejecutando las instrucciones correspondientes al valor verdadero...Lo pongo no para buscar una solución, sino como curiosidad...
Pregunto:

1- ¿Donde y como se asigna el valor a la variable Name?, ¿Puedes publicar el código de asignación?.

2- ¿Que unidades están declaradas en la unidad que presenta el problema?.

3- Si revisas el valor de la variable Name con Ctrl+F7 (Evaluate/Modify), ¿Que valor tiene?.

Espero sea útil

Nelson.
Responder Con Cita
  #8  
Antiguo 19-04-2014
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 16
pacopenin Va por buen camino
Desgraciadamente no puedo recuperar la situación del proyecto en el estado en que se produjo ese problema ya que esta última semana he modificado mucho código y volver a ese punto me llevaría bastante tiempo (que ahora mismo no tengo).

Cita:
Empezado por nlsgarcia Ver Mensaje

1- ¿Donde y como se asigna el valor a la variable Name?, ¿Puedes publicar el código de asignación?.
Name es la propiedad correspondiente al form. El código corresponde al método show.
Como aclaración comentar que todo funcionaba bien hasta que añadí la cuarta condición. Con tres llevaba años (desde el 2010) funcionando sin problema.

Cita:
Empezado por nlsgarcia Ver Mensaje

2- ¿Que unidades están declaradas en la unidad que presenta el problema?.
Código Delphi [-]
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, Grids, DBGrids, SMDBGrid, JvExExtCtrls,
  JvExtComponent, JvPanel, DBCtrls, DB, ZAbstractRODataset, ZAbstractDataset,
  ZDataset, Menus, JvComponentBase, JvFormPlacement;

....

implementation

uses UDatos, lib01, LibEngine;

Las uses debajo de implementation corresponden a unidades propias del proyecto desarrolladas por mi.

Cita:
Empezado por nlsgarcia Ver Mensaje

3- Si revisas el valor de la variable Name con Ctrl+F7 (Evaluate/Modify), ¿Que valor tiene?.
Los valores de las variables y de la evaluación de la expresión puedes verlas en la primera pantalla que puse al lado izdo.

Cita:
Empezado por mamcx Ver Mensaje
El código compilado no es el mismo al código escrito -por ejemplo, un cambio que se le hizo y luego el compilador no refresco ese cambio-. ... EL chiste seria ver que muestra el ensamblador.
Estoy de acuerdo.

Cita:
Empezado por ecfisa Ver Mensaje
La condición del código de tu primer mensaje, está correctamente definida y tendría que funcionar del mismo modo para las diferentes formas de expresarlo, eso quería resaltar en el mensaje anterior.

Creo que la causa mas plausible es la que sugiere Casimiro en el mensaje #3. Tal vez el compilador tratando de optimizar el código, en algunas condiciones, cambie la lógica del predicado.
Saludos
Y contigo,

Saludos,
__________________
http://www.gestionportable.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Evaluar doble condicion al hacer clic en boton jafera OOP 2 25-01-2014 19:00:52
El extraño caso de la etiqueta (TLabel) invisible. TiammatMX OOP 1 10-11-2011 22:11:07
Evaluar un Proyecto Migpal Debates 2 24-11-2005 13:23:05
Extraño caso con Rave CartoneroWeb Impresión 0 20-10-2005 22:53:45
Locate en IBX caso extraño raul_sal Conexión con bases de datos 1 27-03-2004 18:41:38


La franja horaria es GMT +2. Ahora son las 08:53:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi