Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Problema en bucle (https://www.clubdelphi.com/foros/showthread.php?t=29266)

CarmaZone 17-01-2006 19:41:22

Problema en bucle
 
Hola a todos, no sabia si poner aki el post o en otro hilo porque es de tablas y de programacion general. El codigo es este:
Código Delphi [-]
        with DataModule_Fact_Albar do 
        begin 
            while not(Query_Alb.Eof) do 
            begin 
                Query_Alb.DisableControls; 
                Query_Lin_Alb.First; 
                while not(Query_Lin_Alb.Eof) do 
                begin 
                    Query_Lin_Alb.DisableControls; 
                    Query_Lin_Resum_Alb.Append; 
                    Query_Lin_Resum_AlbNUM_ALB.Value:=Query_Resum_AlbNUM_ALB.Value; 
                    Query_Lin_Resum_AlbCANTIDAD.Value:=Query_Lin_AlbCANTIDAD.Value; 
                    Query_Lin_Resum_AlbCONCEPTO.Value:=Query_Lin_AlbCONCEPTO.Value; 
                    Query_Lin_Resum_AlbPRECIO_UNIDAD.Value:=Query_Lin_AlbPRECIOUNIDAD.Value; 
                    Query_Lin_Resum_AlbTOTAL.Value:=Query_Lin_AlbTOTAL.Value; 
                    Query_Lin_Resum_Alb.Post; 
                    Query_Lin_Alb.EnableControls; 
                    Query_Lin_Alb.Next; 
                end; 
                Query_Alb.EnableControls; 
                Query_Alb.Next; 
            end; 
        end;

Me explico, el codigo me coge varios albaranes y me va recorriendo su cuerpo para hacerme una convercion de "Varios Albaranes"" --> "A uno Solo", esto me lo hace bien. EL problema viene a que quiero que cuando me recorre lso albaranes me vaya poniendo a "SI" el campo convertido del albaran, para que cuando realize conversiones posteriores solo me coja los "Albaranes NO Convertidos", por lo que añado el codigo:

Código Delphi [-]
DataModule_Fact_Albar.Query_AlbConvertido.value:='SI';

Pero no me lo hace bien, me pone a "SI", el 1º y 3º y el 2º lo deja a "NO" :eek:, he probado a poner en todas partes del bucle, incluso lo puesto 2 y 3 veces xDDD y siempre me hace lo mismo, y además de no ponerme a "SI" todos los "albaranes convertidos", la conversion tambien la hace mal y sin esa linea convierte bien :confused::confused::confused:

Estoy un poco desesperado porque nose ya que probar jeje.

Gracias de antemano y Salu2!!!

epuigdef 18-01-2006 16:54:24

Buenas!

Yo diría que el bucle se vuelve un poco loc con tantas vueltas que le das. Lo mejor es hacerlo pasito a pasito: Primero recorres el bucle sumando, y lo que quieras, y después hacer una sentencia SQL de actualización con el mismo where para cambiar a SI el campo.

Espero que te sirva

Edu

CarmaZone 18-01-2006 19:04:56

No creo ke sea por eso porque incluso he probado solo:

Código:

        DataModule_Fact_Albar.QueryAlb.first;
        DataModule_Fact_Albar.Query_AlbConvertido.value:='SI';        with DataModule_Fact_Albar do
        begin
            while not(Query_Alb.Eof) do
            begin
                DataModule_Fact_Albar.Query_AlbConvertido.value:='SI';
              Query_Alb.Next;
 
            end;
        end;

Solo eso, sin nada mas para ver si salia y me hace lo mismo, uno si y otro no, y ya nose que probar.

Gracias y perdon pero no tengo internet y tengo que venir a un ciber.

Salu2!!!

Ivanzinho 19-01-2006 09:13:07

¿Por qué no lo ejecutas en modo debug y pones un punto de interrupción al principo del bucle para ejecutarlo paso a paso y ver por donde va el programa?. Puedes poner una variable de prueba que recoja el identificador de la linea para ver los valores que va tomando y las líneas por las que se va pasando en el bucle.

¿La query recoge todas las líneas que tu crees que debe tener?

Comprueba esto y ya nos contarás.

epuigdef 19-01-2006 14:49:23

Prueba esto:

Código Delphi [-]
DataModule_Fact_Albar.QueryAlb.first;
with DataModule_Fact_Albar do
begin 
  • while not(Query_Alb.Eof) do begin
  • Query_AlbConvertido.Edit;
  • Query_AlbConvertido.value:='SI';
  • Query_AlbConevertido.post;
    • Query_AlbConvertido.Next;
end; end;

Un saludo

Edu

CarmaZone 19-01-2006 19:55:08

Hola a todos y gracias por vuestras respuestas.

* Query_AlbConvertido.Edit;

* Query_AlbConvertido.value:='SI';

* Query_AlbConevertido.post;

Esto tambien lo probre para asegurarme de que me guardaba el valor con un post y tambien antes lo puse en modo edicion, aunque volvere a probar jeje. La query si me recoge bien los valores ya que tengo mas cosas hechas y nunca me ha dado problema de este tipo, las pruebas las he hecho sobre 3 albaranes, he peusto solo 3 albaranes a NO y solo me convierte el 1º y 3º, probare paso a paso y a ver si se me ocurre algo más porque lo veo muy raro ya que "creo" que el bucle esta bien, es muy simple XDDDDD.

Gracias de nuevo por vuestras respuestas y si os ocurre algo más será bien agradecido :P

Ya os contare. Salu2!!!

Ivanzinho 20-01-2006 09:51:20

A mi me pasara una vez algo parecido, realice un debug paso a paso y descubrí que era porque tenía una instrucción donde pasaba al siguiente registro (ahora no me acuerdo cual era), por lo que quité el query.next y me funcionó correctamente.

Puedes quitar el Query_AlbConvertido.Next y probar, aunque si no es de eso te entrará en un bucle infinito.

De todos modos aunque te funciones así te recomiendo que vayas paso a paso mirando por donde va el programa para ver porque en el segundo albarán no te pasa por la línea Query_AlbConvertido.Value = SI

Ya nos contarás

Un saludo.


La franja horaria es GMT +2. Ahora son las 21:24:00.

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