Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-01-2011
gri gri is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 10
Poder: 0
gri Va por buen camino
while anidado para leer una tabla

Hola necesito leer una tabla y encontrar los productos que se llaman igual y que tienen fechas iguales y sumar las cantidades de estos productos , yenviar sus datos en otra tabla.
con el codigo que tengo lo hace una vez(los datos correctos) y lo escribe en la otra tabla, pero necesito que lo haga otra vez.

utilice 2 while uno dentro de otro. pero el de adentro llega al final, y como es el mismo no puedo regresar al primer while y necesito regresar al primer while.
el codigo es mas o menos asi:
(Table2 es donde revisa y obtiene los datos y table1 debe escribirlos despues con todo y calculo)

Código Delphi [-]
while Not Table2.Eof do
begin
  Cant:=0;
  Table2.Edit;
    DataSource2.DataSet.Edit;
    a:=Table2.FieldValues['FechaMenu'];
    b:=Table2.FieldValues['Dia'];
    c:=Table2.FieldValues['Nombre'];
    d:=Table2.FieldValues['Cantidad'];
    e:=Table2.FieldValues['Unidad'];
    f:=Table2.FieldValues['Clasificacion'];
    table2.First;//para comparar las variables con cada registro de la tabla
    while Not table2.Eof  do
    begin
    DataSource2.DataSet.Edit;
      if (a=Table2.FieldValues['FechaMenu'])and (c=Table2.FieldValues['Nombre']) then
      begin
      cant:= cant + Table2.FieldValues['Cantidad'];
      end;
      Table2.Edit;
      Table2.Next;
    end; {fin del while 2}

    if not(Table1.Locate('Descripcion',c, [])) then
      begin
      table1.Append;
      Table1.Edit;
      Table2.Edit;
      Table1.FieldValues['Proveedor']:=f;
      Table1.FieldValues['Descripcion']:=c;
      Table1.FieldValues['Unidad']:=e;
      Table1.FieldValues['CantidadP']:=cant;
      Table1.FieldValues['FechaE']:=a;
      //Table2.First;// probando para ver si lo hace 2 veces
      end;
    Table1.Edit;
    Table1.Post;
   Table2.Next;//AKI YA NO PUEDE LLEGAR POR QUE YA LLEGO AL EOF DE MI TABLE 2
  //end;{fin del if que comprueba lo que tengo en la primera posicion es = a la fecha}
 end; {fin del while}

Ayudenme
Responder Con Cita
  #2  
Antiguo 21-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo.
Tomas los datos de la tabla1 y los quieres guardar en la tabla2 ?.
Si es asi por que editas las dos tablas?
Por que recorres con el while solo 1 de las dos?.
Como dije, seguro no entiendo la pregunta.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 21-01-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Además hay cosas extrañas en ese código, deberás expresarte mejor para que entendamos lo que quieres hacer.
Responder Con Cita
  #4  
Antiguo 21-01-2011
gri gri is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 10
Poder: 0
gri Va por buen camino
Hola

table2 recorro para obtener lo datos y calcular.(es otra tabla de mi BD)
table 1 es para llenar ya con los tatos calculados de mi table2.

SON TABLA DIFERENTES.

por que edito las dos tablas, la verdad mi makina esta loca lo hice por que sino de plano no hacia nada.

por que recorro una tabla x q no todo lo que obtengo quiero pasar en la otra tabla.
Responder Con Cita
  #5  
Antiguo 21-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo.
Trata de explicarte algo mejor.
La verdad yo no entiendo, por lo menos viendo el codigo.
No te preocupes en exponer todo con detalle, no cobran por letra.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 21-01-2011
gri gri is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 10
Poder: 0
gri Va por buen camino
me esfuerzo me esfuerzo, es q ya me llego la desesperacion, esoty con esto desde la semana pasada de verdad.
ok, voy a explicar la tabla que tengo Table2 (su nombre en mi BD es ingredientesdiarios.db) y es asi:
//esta es mi tabla llena
FechaMenu Dia Nombre Cantidad Unidad Clasificacion

1017012011 Lunes Pollo 20 K carnes
1017012011 Martes Avena 3 C Abarrotes
1017012011 jueves Pollo 35 K carnes
1017012011 Viernes Puerco 30 K carnes
1017012011 Viernes Avena 5 C carnes



la tabla que quiero llenar es Table1 (su nombre es pedidogral en mi BD) parra llenarla agarrando los datos de la tabla arriba si se fijan sus cantidades quiero sumar.

// asi debe quedar llenada

Proveedor Descripcion Unidad CantidadP CantidadS FechaE FechaS

carnes Pollo K 55 1017012011
Abarrotes Avena c 8 1017012011
carnes Puerco K 30 1017012011



me explique mejor??
Responder Con Cita
  #7  
Antiguo 21-01-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Entiendo.
Lo que me parece es que no puedes recorrer una tabla y sumar ciertos campos de esa manera.
Creo que lo optimo en esta situacion seria usar, por lo menos en el caso de la tabla 1, una sentencia sql y por lo tanto un query en vez de un table.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #8  
Antiguo 21-01-2011
gri gri is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 10
Poder: 0
gri Va por buen camino
Hola ya me di cuenta q no puedo por que ya lo intente de todas las formas q se me ocurre y namas no no kiere.

con consulta sql tambien tal vez lo he hecho mal, y como comente hace ratito, las ideas ya no me fluyen. ayudenme
Responder Con Cita
  #9  
Antiguo 21-01-2011
gri gri is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 10
Poder: 0
gri Va por buen camino
en consulta sql no se como escribir
para que busque los datos iguales dentro de un mismo campo.
campo Nombre.
Responder Con Cita
  #10  
Antiguo 21-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 21
Aleca Va por buen camino
disculpen pero ya esta abierto este hilo como sergioperez http://www.clubdelphi.com/foros/showthread.php?t=71943
Código Delphi [-]
  Tabla1.First;
  camposum
  campo := 0;
  while not Tabla1.Eof;
  begin
     if campo = Tabla1Valor1 then
       camposum := camposum + Tabla1ValorASumar
     else
     begin
       Tabla2.Append;
       Tabla2Valor1 := campo;
       Tabla2ValorSumado := camposum;
       Tabla2.Post;
       campo := Tabla1Valor1; camposum :=0;
     end;
     Tabla1.Next;
  end;
  //
  Tabla2.Append;
  Tabla2Valor1 := campo;
  Tabla2ValorSumado := camposum;
  Tabla2.Post;
fijate con algo asi.
__________________
Aleca
Responder Con Cita
  #11  
Antiguo 21-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 21
Aleca Va por buen camino
Cita:
Empezado por gri Ver Mensaje
en consulta sql no se como escribir
para que busque los datos iguales dentro de un mismo campo.
campo Nombre.
Código Delphi [-]
Select SUM(ItemRemito.VALOR_ITEM) as ValorTotal From ItemRemito
Where ItemRemito.ID_REMITO = :ID_REMITO
__________________
Aleca
Responder Con Cita
  #12  
Antiguo 21-01-2011
gri gri is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 10
Poder: 0
gri Va por buen camino
Muchas gracias por la ayuda y si disculpen, es que somos compañeros de clases y cada quien esta haciendo su sistema, pero al parecer quereos hacer practicamente lo mismo, cada quien con sus propias ideas, pero aun no lo hemos logrado.

Tuve problemitas al registrarme, pues nunca me he escrito a un foro y menos de programacion, y como no podia mis dudas lo escribi en su sesion del otro usuario
Responder Con Cita
  #13  
Antiguo 21-01-2011
sergioperez sergioperez is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 27
Poder: 0
sergioperez Va por buen camino
el codigo que puso esta bien pero lo que nosotros queremos es buscar los nombres iguales en una tabla en este caso ingredientesdiarios y que en sus cantidades me lo sume para hacerlo uno solo me explico

nota nuestro sistema no es igual pero en esto si se asemeja
gracias por su ayuda
Responder Con Cita
  #14  
Antiguo 21-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 21
Aleca Va por buen camino
pareciera que se sentaran juntos. (No hay que copiarse muchachos)
__________________
Aleca
Responder Con Cita
  #15  
Antiguo 21-01-2011
gri gri is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 10
Poder: 0
gri Va por buen camino
Hola definitivamente no nos copiamos, son sistemas de diferentes cosas el mio es de un sistema para controlar materiales alimenticios que se usan en un comedor de mi escuela, se necesitan hacer pedidos de todo lo que se necesita cocinar, los pedidos son semanales por proveedor, y para hacer pedidos se necesita saber que ingredientes llevan las comidas y tambien depende del menu semanal de comidas, pero no solo eso debo de hacer la lista de ingredientes por dia.

Pero todo ya lo hace mi sistema y solo me faltaba la parte de hacer los pedidos, una vez teniendo mi pedido semanal, lo de los proveedores lo voy hacer con consulta.

Y el de sergio es de un hospital en la parte del almacen, todos los empleados llevan su solicitud mensual de lo que necesitan y el almacenista surte cada mes, pero como almacenista tambien tiene que hacer sus pedidos dependiendo de todo lo que los empleados pidieron.
Responder Con Cita
  #16  
Antiguo 21-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 21
Aleca Va por buen camino
disculpen pero....
Codigo 1
Código Delphi [-]
var
a, b, c, d, e, f:String;
cant: Integer;
begin
{si lo q se captura ya esta guardado en pedido no debe hacer nada}
if (Table1.Locate('FechaE', Edit1.Text, [])) then
begin
ShowMessage('Ya existe el pedido de esa fecha');
end
else
{si lo q se captura no se ha pedido}
begin
ShowMessage('espera unos segundos');
   Table2.First;
   table2.Edit;
  While Not Table2.Eof do
  begin
    Cant:=0;
    Table2.Edit;
    DataSource2.DataSet.Edit;
    begin
    a:=Table2.FieldValues['FechaMenu'];
    b:=Table2.FieldValues['Dia'];
    c:=Table2.FieldValues['Nombre'];
    d:=Table2.FieldValues['Cantidad'];
    e:=Table2.FieldValues['Unidad'];
    f:=Table2.FieldValues['Clasificacion'];
    table2.First;
    LABEL6.Caption:=a+c;
    while Not table2.Eof  do
    begin
    showmessage('segundo while');
    DataSource2.DataSet.Edit;
      if (a=Table2.FieldValues['FechaMenu'])and (c=Table2.FieldValues['Nombre']) then
      begin
      showmessage('probando en el if');
      cant:= cant + Table2.FieldValues['Cantidad'];
      end;
      Table2.Next;
    end; {fin del while 2}
    if not(Table1.Locate('Descripcion',c, [])) then
      begin
      table1.Append;
      Table1.Edit;
      Table1.FieldValues['Proveedor']:=f;
      Table1.FieldValues['Descripcion']:=c;
      Table1.FieldValues['Unidad']:=e;
      Table1.FieldValues['CantidadP']:=cant;
      Table1.FieldValues['FechaE']:=a;
      end;
    Table1.Post;
    Table2.Next;
  //end;{fin del if que comprueba lo que tengo en la primera posicion es = a la fecha}
  end; {fin del while}
Table2.Post;
end;{fin del else}
end; {fin del metodo del boton}
Codigo 2
Código Delphi [-]
while Not Table2.Eof do
begin
  Cant:=0;
  Table2.Edit;
    DataSource2.DataSet.Edit;
    a:=Table2.FieldValues['FechaMenu'];
    b:=Table2.FieldValues['Dia'];
    c:=Table2.FieldValues['Nombre'];
    d:=Table2.FieldValues['Cantidad'];
    e:=Table2.FieldValues['Unidad'];
    f:=Table2.FieldValues['Clasificacion'];
    table2.First;//para comparar las variables con cada registro de la tabla
    while Not table2.Eof  do
    begin
    DataSource2.DataSet.Edit;
      if (a=Table2.FieldValues['FechaMenu'])and (c=Table2.FieldValues['Nombre']) then
      begin
      cant:= cant + Table2.FieldValues['Cantidad'];
      end;
      Table2.Edit;
      Table2.Next;
    end; {fin del while 2}

    if not(Table1.Locate('Descripcion',c, [])) then
      begin
      table1.Append;
      Table1.Edit;
      Table2.Edit;
      Table1.FieldValues['Proveedor']:=f;
      Table1.FieldValues['Descripcion']:=c;
      Table1.FieldValues['Unidad']:=e;
      Table1.FieldValues['CantidadP']:=cant;
      Table1.FieldValues['FechaE']:=a;
      //Table2.First;// probando para ver si lo hace 2 veces
      end;
    Table1.Edit;
    Table1.Post;
   Table2.Next;//AKI YA NO PUEDE LLEGAR POR QUE YA LLEGO AL EOF DE MI TABLE 2
  //end;{fin del if que comprueba lo que tengo en la primera posicion es = a la fecha}
 end; {fin del while}
yo los veo demasiado parecido....
__________________
Aleca
Responder Con Cita
  #17  
Antiguo 21-01-2011
gri gri is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 10
Poder: 0
gri Va por buen camino
hola

te recomiendo que lo leas detenidamente para que me entiendas.

si son parecidos por que el primer while(codigo 1) agarra los datos que tengo al entrar y lo pone en variables a, b, c, ... son temporales.(almacenan datos(nombres) que se repiten dentro de toda mi tabla pero sus cantidades son diferentes) entonces necesito sumar sus cantidades.

el segundo while(codigo 2) recorra toda la tabla busca esos datos suma sus cantidades.(ahi termina su funcion del segundo while). sale.

inserta los datos dentro de otra tabla(sino estan insertados).

y debe regresar (recuerda que sali del while(codigo2)) al while(codigo1)....

pero ahi esta el pero, como es la misma tabla el while(codigo2 me deja al final se acabo) y definitivamente no puedo regresar al while1(codigo1).


ese es el problema.
Responder Con Cita
  #18  
Antiguo 21-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 21
Aleca Va por buen camino
dos cabezas piensan mas que una, juntate con tu compañero y adapten el codigo que puse mas arriba.
PD: la tabla2 no debe editarse, tenes que tener un solo while.
__________________
Aleca
Responder Con Cita
  #19  
Antiguo 23-01-2011
gri gri is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 10
Poder: 0
gri Va por buen camino
hola despues de todo se soluciono aqui esta:
Código SQL [-]
DBGrid3.Visible:=True;
QUERY1.SQL.Clear;
QUERY1.SQL.Add('Select FechaMenu, Clasificacion, Nombre, sum(Cantidad) as Total,Unidad, Count(*) as NumeroProducto From ingredientesdiarios  where FechaMenu='+QuotedStr(Edit1.Text));
QUERY1.SQL.Add('group by FechaMenu, Clasificacion, Nombre, Unidad');
QUERY1.Active:=True;
QUERY1.Open;

No estaba tan lejos, solo que las veces que lo intentaba hacer no usaba el Group by, y me decia que era necesario.
de todas formas gracias.

una dudita ¿alguien sabe como envio el resultado de una consulta, o lo que tiene un query, a un reporte de report builder?

Saludos
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Leer un TXT e insertar en tabla de firebird ivantech Firebird e Interbase 13 01-09-2010 21:44:09
Cómo leer una imagen de una tabla en sql server... ronimaxh Varios 13 26-07-2010 17:40:46
Utilizar un DBGrid para leer de una tabla y escribir en otra taru MySQL 0 25-07-2006 18:31:06
Necesito crear un permiso para escribir pero no para leer federiconqn21 Conexión con bases de datos 5 07-07-2006 19:13:47


La franja horaria es GMT +2. Ahora son las 19:52:16.


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