Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Salir del for select cuando se cumpla una condición (https://www.clubdelphi.com/foros/showthread.php?t=27779)

Ivanzinho 30-11-2005 17:05:47

Salir del for select cuando se cumpla una condición
 
Hola foro, estoy desarrollando el proceso de albaraneado de las líneas de pedido de los clientes de una empresa de distribución. Utilizo D5 y FB1.5.

Cuando se quieren servir las líneas de un cliente compruebo que por lo menos se pueda servir una línea, para de esta manera crear la cabecera de albarán y con posterioridad añadir la líneas a dicha cabecera. Este proceso lo hago en un SP de la siguiente manera.

Código SQL [-]
for select campos from linped do
   begin
      comprobar si la línea se puede servir
      if (linea puede servir) then
         servible = 1;
      else
         servible = 0;
   end

Cuando encuentro la primera línea ya no me interesa comprobar el resto (la cabecera de albarán se puede crear), por lo que desearía salirm de la ejecución del for select. Yo había pensado en lo siguente :

Código SQL [-]
Salir = 0;
for select campos from linped do
   if (Salir = 0) then
      begin
         comprobar si la línea se puede servir
         if (linea puede servir) then
            begin
               servible = 1;
               Salir = 1;
            end
         else
            servible = 0;
      end

Para así evitar las comprobaciones, pero no me parece una forma muy ortodoxa de realizarlo, por lo que pregunto si alguien conoce alguna forma de salir de la ejecución del for select.

Gracias por vuestra atención.

Héctor Randolph 30-11-2005 17:16:21

Hola Ivanzinho!

Prueba con esto, creo que te puede servir

Código SQL [-]
for select campos from linped do
   begin
      /* comprobar si la línea se puede servir*/
      if (linea puede servir) then suspend;
   end

No lo he probado aún, después nos cuentas los resultados.

Saludos

Héctor Randolph 30-11-2005 17:19:14

Corrección, me parece que lo que te puede servir es

Código SQL [-]
for select campos from linped do
   begin
      /* comprobar si la línea se puede servir*/
      if (linea puede servir) then exit;
   end

Espero que sea útil

Ivanzinho 30-11-2005 17:19:23

Gracias Héctor, lo pruebo y ya os comento.

dec 30-11-2005 17:22:01

Hola,

Creo que podrías utilizar la instrucción "break" para hacer lo que dices. Con "Exit" no solamente saldrás del bucle en cuestión, sino también del procedimiento o función en que esté dicho bucle. Con "break" saldrás del bucle, pero no del bloque (procedimiento o función) en que se encuentre este.

Ivanzinho 30-11-2005 17:50:33

Es justo como dice dec, gracias a los dos

dec 30-11-2005 17:55:14

Hola,

Aquí, aquí se ve quién sabe y quién no sabe... ¿Pues no que he acertado sin siquiera ver de qué se trataba? Me explico: he acertado por casualidad, y ahí se demuestra que el que sabe, sabe. En serio, pensaba en un bucle de Delphi, fuera un "for" o fuera un "while", pero, no he pensado en modo alguno en Interbase/FireBird, es decir, en el bucle "for select", así pues, he acertado, pero de casualidad... porque se usa la misma instrucción "break" en estos casos... lo mismo pasa con C#, y supongo que igual con C y C++. ¡Soy de lo que no hay! ¿Eh? Pues eso. :D

jhonny 30-11-2005 18:35:49

Cita:

Empezado por dec
¡Soy de lo que no hay!

Bastante modesto dec:rolleyes: jejeje, de hecho mas modesto que el mismo Federico Firenze que es Argentino ;) :D

rastafarey 30-11-2005 22:47:48

Resp
 
El ciclo lo puedes romper con break.

Suspende Es para indicar que ese registro se retorna y el exit creo que sale del modulo completamente aparte d eromper el ciclo(lo dle exit no estoy 100% seguro luego que verifique te digo)


La franja horaria es GMT +2. Ahora son las 15:20:42.

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