PDA

Ver la Versión Completa : Problema en bucle


CarmaZone
17-01-2006, 19:41:22
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:
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:

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:

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:


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.