Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-11-2005
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
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.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #2  
Antiguo 30-11-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 30-11-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 30-11-2005
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Gracias Héctor, lo pruebo y ya os comento.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #5  
Antiguo 30-11-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 30-11-2005
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Es justo como dice dec, gracias a los dos
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #7  
Antiguo 30-11-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 30-11-2005
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por dec
¡Soy de lo que no hay!
Bastante modesto dec jejeje, de hecho mas modesto que el mismo Federico Firenze que es Argentino
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 30-11-2005 a las 17:38:42. Razón: Me faltaba el emoticon de sarcasmo
Responder Con Cita
  #9  
Antiguo 30-11-2005
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
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)
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 23:25:13.


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