Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-09-2005
Jvilomar Jvilomar is offline
Miembro
 
Registrado: mar 2004
Ubicación: Republica Dominicana
Posts: 97
Poder: 21
Jvilomar Va por buen camino
Question Case con Expresiones Complejas

Hola mi gente... saludos a Todos...

Bueno mi problema es el siguiente.... o mi pregunta es la siguiente mejor dicho...

quisiera saber como puedo utilizar una sentencia case utilizando una expresion compleja seria algo como:

Código Delphi [-]
   Case (Resultado>=1) and (Resultado<=6) of
     1: {...}
     2: {...}
     3: {...}
   End;
Es posible esto?... gracias de ante manos....
__________________
El conocimiento es un Patrimonio Universal....

Última edición por dec fecha: 29-09-2005 a las 09:16:05. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #2  
Antiguo 28-09-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Wow:-o que tienes pensado?????
no creo que esto sea posible
Que es lo que en realidad necesitas hacer//??

Saludos
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #3  
Antiguo 28-09-2005
Jvilomar Jvilomar is offline
Miembro
 
Registrado: mar 2004
Ubicación: Republica Dominicana
Posts: 97
Poder: 21
Jvilomar Va por buen camino
Mira.. gracias.. por responder tan rapido....

Tengo unos datos que me arrojan ese tipo de resultado o sea.. en un intervalo y en base a ellos necesito realizar un procedimiento distinto.. dependiendo del valor de la variable... pero es en un intervalo.. se que existe otra forma como son los IF anidados.. pero lo he intentado asi y no me funciona.. entonces pense en el case que es mas facil para mi.. pero no se si se pueda hacer lo que estoy intentando....
__________________
El conocimiento es un Patrimonio Universal....
Responder Con Cita
  #4  
Antiguo 28-09-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Claro que se puede.... faltaría más

Código Delphi [-]
if  (Resultado>=1) and (Resultado<=6) then
case resultado of
1: ........
2: ........
3: ........
End;

, Ya sé que no es lo que quería, pero el case solo va con expresiones simples. De otra forma se puede jugar:

Código Delphi [-]
case resultado of
2,3,4,5,6:case Resultado of
              2:....
              3:...
              end;
7: ........
8: ........
End;

Un saludo
Responder Con Cita
  #5  
Antiguo 28-09-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Bueno intenta
Código Delphi [-]
 if (resultado>=1) and (resultado<=6) then
 Case Resultado of
 1: ........
 2: ........
 3: ........
 End;
A ver
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #6  
Antiguo 28-09-2005
Jvilomar Jvilomar is offline
Miembro
 
Registrado: mar 2004
Ubicación: Republica Dominicana
Posts: 97
Poder: 21
Jvilomar Va por buen camino
o sea que en caso de que los parametros sean mas grandes... podria hacer lo mismo o sea

Código Delphi [-]
 IF (resultado >= 30) and (Resultado <=60) then
   case resultado of
     31:
     40:
     50:
   end
Bueno... eso creo....
__________________
El conocimiento es un Patrimonio Universal....

Última edición por dec fecha: 29-09-2005 a las 09:14:59. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #7  
Antiguo 28-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una variante:

Código Delphi [-]
if Resultado in [1..6] then
  case Resultado of
    1: .....
    2: .....
    3: .....
  end

// Saludos
Responder Con Cita
  #8  
Antiguo 28-09-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por Jvilomar
o sea que en caso de que los parametros sean mas grandes... podria hacer lo mismo o sea
Si está bién. Usa el método de Roman (Genial)
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #9  
Antiguo 28-09-2005
Jvilomar Jvilomar is offline
Miembro
 
Registrado: mar 2004
Ubicación: Republica Dominicana
Posts: 97
Poder: 21
Jvilomar Va por buen camino
Gracias..... vamos a probarlo a ver que me sale......

__________________
El conocimiento es un Patrimonio Universal....
Responder Con Cita
  #10  
Antiguo 28-09-2005
Jvilomar Jvilomar is offline
Miembro
 
Registrado: mar 2004
Ubicación: Republica Dominicana
Posts: 97
Poder: 21
Jvilomar Va por buen camino
Bueno.. no funciona.. me da un error... aqui esta la fraccion de codigo... para ver si me pueden ayudar a mejorarla.......

Código Delphi [-]
FechaResultado := trunc(abs(((FechaUltimoPago-Date))));
 
 if (FechaResultado>=30) and (FechaResultado<=7826) then
   case resultado of
     30..90:
     begin
       Resultado := trunc(VCuota * FechaResultado);
       EjecutaSPActualizaProyectos(idCuenta,NoContrato,Manzana,Edificio,Apartamento,
       VInmueble,VInicial,VCUota,VPagado,Balance,Resultado,0.00,0.00,0.00,0.00,0.00,FechaUltimoPago);
     End;
     91..180:
     begin
       Resultado := trunc(VCuota * FechaResultado);
       {...}
       {...}
       {...}
__________________
El conocimiento es un Patrimonio Universal....

Última edición por dec fecha: 29-09-2005 a las 09:13:38. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #11  
Antiguo 28-09-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Código Delphi [-]
Case A Of
    1: Case B Of
      1: Begin End;
      2: Begin End;
      3: Begin End;
      4: Begin End;
    End;
    2: Case B Of
      1: Begin End;
      2: Begin End;
      3: Begin End;
      4: Begin End;
    End;
    3: Case B Of
      1: Begin End;
      2: Begin End;
      3: Begin End;
      4: Begin End;
    End
End;
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #12  
Antiguo 28-09-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Cita:
Empezado por Jvilomar
Bueno.. no funciona.. me da un error... aqui esta la fraccion de codigo... para ver si me pueden ayudar a mejorarla.......
Seria bueno que nos escribieras el error que te da
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #13  
Antiguo 28-09-2005
Jvilomar Jvilomar is offline
Miembro
 
Registrado: mar 2004
Ubicación: Republica Dominicana
Posts: 97
Poder: 21
Jvilomar Va por buen camino
Perdon... lo del error era un desliz mio.. hasta ahora me esta funcionando.... pero solo con un solo elemento... el resto se me esta colgando..... o sea.. me hace lo que deseo pero en un solo registro (en este caso es de la base de datos)aqui esta el codigo completo.... A VER SI me dicen que estoy haciendo mal....

Código Delphi [-]
procedure TfrmExportaDatos.bbtnProcesarClick(Sender: TObject);
 var
   idCuenta,FechaResultado  : Integer;
   Manzana,Edificio,Apartamento,NoContrato : String;
   FechaUltimoPago: tDateTime;
   VInmueble, VInicial,VCuota,VPagado,Balance,Resultado : Real;
 begin
   Cursor := crSQLWait;
   While not adoQProyectoExportar.Eof do
   begin
     idCuenta := adoQProyectoExportar.fieldbyName('idCuenta').value;
     NoContrato := adoQProyectoExportar.fieldbyName('NoContrato').value;
     Manzana := adoQProyectoExportar.fieldbyName('Manzana').value;
     Edificio := adoQProyectoExportar.fieldbyName('Edificio').value;
     Apartamento := adoQProyectoExportar.fieldbyName('Apto').value;
     FechaUltimoPago := adoQProyectoExportar.fieldbyName('FechaUltimoPago').value;
     VInmueble := adoQProyectoExportar.fieldbyName('MontoTotal').value;
     VInicial := adoQProyectoExportar.fieldbyName('PagoInicial').value;
     VCuota := adoQProyectoExportar.fieldbyName('ValorCuota').value;
     VPagado := adoQProyectoExportar.fieldbyName('TotalPagado').value;
     Balance := adoQProyectoExportar.fieldbyName('Balance').value;
     FechaResultado := trunc(abs(((FechaUltimoPago-Date))));
     if (FechaResultado >= 30) and (FechaResultado<=7826) then
       case FechaResultado of
         30..90:
         begin
           Resultado := trunc(VCuota * FechaResultado);
           EjecutaSPActualizaProyectos(idCuenta,NoContrato,Manzana,Edificio,Apartamento,
           VInmueble,VInicial,VCUota,VPagado,Balance,Resultado,0.00,0.00,0.00,0.00,0.00,FechaUltimoPago);
         End;
         91..180:
         begin
           Resultado := trunc(VCuota * FechaResultado);
           EjecutaSPActualizaProyectos(idCuenta,NoContrato,Manzana,Edificio,Apartamento,
           VInmueble,VInicial,VCUota,VPagado,Balance,0.00,Resultado,0.00,0.00,0.00,0.00,FechaUltimoPago);
         End;
         181..360:
         begin
           Resultado := trunc(VCuota * FechaResultado);
           EjecutaSPActualizaProyectos(idCuenta,NoContrato,Manzana,Edificio,Apartamento,
           VInmueble,VInicial,VCUota,VPagado,Balance,0.00,0.00,Resultado,0.00,0.00,0.00,FechaUltimoPago);
         End;
         361..730:
         begin
           Resultado := trunc(VCuota * FechaResultado);
           EjecutaSPActualizaProyectos(idCuenta,NoContrato,Manzana,Edificio,Apartamento,
           VInmueble,VInicial,VCUota,VPagado,Balance,0.00,0.00,0.00,Resultado,0.00,0.00,FechaUltimoPago);
         End;
         731..7825:
         begin
           Resultado := trunc(VCuota * FechaResultado);
           EjecutaSPActualizaProyectos(idCuenta,NoContrato,Manzana,Edificio,Apartamento,
           VInmueble,VInicial,VCUota,VPagado,Balance,0.00,0.00,0.00,0.00,Resultado,0.00,FechaUltimoPago);
         End;
         7826:
         begin
           Resultado := trunc(VCuota * FechaResultado);
           EjecutaSPActualizaProyectos(idCuenta,NoContrato,Manzana,Edificio,Apartamento,
           VInmueble,VInicial,VCUota,VPagado,Balance,0.00,0.00,0.00,0.00,0.00,Resultado,FechaUltimoPago);
         End;
       End;
     Cursor := crDefault;
   End;
 End;
__________________
El conocimiento es un Patrimonio Universal....

Última edición por dec fecha: 29-09-2005 a las 09:09:42. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #14  
Antiguo 28-09-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Creo que hace falta:adoQProyectoExportar.Next; en el bucle.
Tambien no se sabe si parte desde el principio o no.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #15  
Antiguo 03-10-2005
Jvilomar Jvilomar is offline
Miembro
 
Registrado: mar 2004
Ubicación: Republica Dominicana
Posts: 97
Poder: 21
Jvilomar Va por buen camino
HOla mi gente.. gracias por su ayuda....

Me sirvio de completa ayuda todo lo que me recomendaro y consegui lo que buscaba....

quisiera recalcar que el ultimo ejemplo que envie le faltaba una parte que era utilizar el Next en el DataSet... pero fue omision mia...

De todos modos muchas gracias otra vez.....
__________________
El conocimiento es un Patrimonio Universal....
Responder Con Cita
  #16  
Antiguo 03-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
¿Posible Mejora?

Si entiendo bien, lo que hace es cambiar el valor de resultado y ponerlo en
otro parámetro formal de EjecutaSp..., entonces, no sería mejor identificar los
parámetros y cambiar solo el que se desea?, me explico mejor, Suponiendo
que los parámetros despues de Balance y antes de FechaUltimo pago son:

Código Delphi [-]
...Balance, Res1, Res2, Res3, Res4, Res5, Res6, FechaUltimoPago)


Código Delphi [-]
Res1:= 0.00;
Res2:= 0.00;
Res3:= 0.00;
Res4:= 0.00;
Res5:= 0.00;
Res6:= 0.00;
if (FechaResultado >= 30) and (FechaResultado<=7826) then
       case FechaResultado of
         30..90:     Res1 := trunc(VCuota * FechaResultado);
         91..180:    Res2 := trunc(VCuota * FechaResultado);
      end;
with  adoQProyectoExportar do
EjecutaSPActualizaProyectos(
    Parambyname('idcuenta').Value
    Parambyname('NoContrato').value,

   Manzana,Edificio,Apartamento,
   VInmueble,VInicial,VCUota,VPagado,Balance,

   Res1, Res2 , Res3, Res4, Res5, Res6,

   FechaUltimoPago);
Queda un código más claro ¿no? ...o será cuestión de gustos

Un saludo

Última edición por Lepe fecha: 03-10-2005 a las 15:33:22.
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


La franja horaria es GMT +2. Ahora son las 09:36:10.


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