Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Case con Expresiones Complejas (https://www.clubdelphi.com/foros/showthread.php?t=25631)

Jvilomar 28-09-2005 18:59:51

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....

vtdeleon 28-09-2005 19:12:08

Wow:-o que tienes pensado?????
no creo que esto sea posible
Que es lo que en realidad necesitas hacer//??

Saludos

Jvilomar 28-09-2005 19:15:16

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....

Lepe 28-09-2005 19:18:24

Claro que se puede.... faltaría más :p

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

:D :D, 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

vtdeleon 28-09-2005 19:21:27

Saludos

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

Jvilomar 28-09-2005 19:22:39

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....

roman 28-09-2005 19:23:06

Una variante:

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

// Saludos

vtdeleon 28-09-2005 19:24:54

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)

Jvilomar 28-09-2005 19:40:08

Gracias..... vamos a probarlo a ver que me sale......

:D

Jvilomar 28-09-2005 19:55:04

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);
       {...}
       {...}
       {...}

rastafarey 28-09-2005 20:00:23

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;

vtdeleon 28-09-2005 20:13:03

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

Jvilomar 28-09-2005 21:02:23

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;

vtdeleon 28-09-2005 21:32:26

Saludos

Creo que hace falta:adoQProyectoExportar.Next; en el bucle.
Tambien no se sabe si parte desde el principio o no.

Jvilomar 03-10-2005 14:50:14

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.....:cool:

Lepe 03-10-2005 15:26:21

¿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


La franja horaria es GMT +2. Ahora son las 17:30:49.

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