Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-01-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Question Filtrar Tabla con datos de otra Tabla

Buenas, tengo una duda enorme.

Tengo dos tablas, TABLA1 contiene componentes de una formula (materias primas) y la TABLA2 tiene todos los componentes (materias primas) para crear los productos correspondientes. Cada vez que elijo un producto me muestra cuales son los componentes necesarios, ¿Como puedo "FILTRAR" la TABLA2 para que solo me muestre los componentes que se ven en la TABLA1??? es necesario sea asi, ya que desde hay necesito generar el descuento de STOCK de los componentes y varios productos comparten las mismas materias primas.

De antemano muchas gracias...

PD: Utilizo Delphi 2010, Zeos 7.0.0, MySQL
Responder Con Cita
  #2  
Antiguo 21-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 22
Aleca Va por buen camino
como tenes organizadas las tablas, porque me parece que podrias poner una tercera.
__________________
Aleca
Responder Con Cita
  #3  
Antiguo 21-01-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Arrow Gestion Tablas

Tengo 3 Tablas:

Tabla1: Nombre Producto.
Tabla2: Formula Producto (Materias Primas) con las cantidades necesarias.
Tabla3: Materias Primas (Todas) con el STOCK disponible.

Cuando selecciono un producto (Tabla1) me muestra (Filtra) las materias primas necesarias para crear/fabricar aquel producto (Tabla2), hasta hay todo OK, pero el problema es que necesito que la Tabla3 me muestre solamente los productos que muestra la Tabla2 (que pueden ser uno o varios) para asi generar el descuento del STOCK restando desde la Tabla2 a la Tabla3, como varios productos comparten mismas materias primas deve ser asi... se entiende???.
es lo unico que me falta para poder cerrar esta parte del softy no doy con la solucion aun ...

Ante cualquier consulta, sugerencia o ayuda estare atento... mil gracias de antemano.

Última edición por Lenny fecha: 21-01-2011 a las 16:28:28.
Responder Con Cita
  #4  
Antiguo 21-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 22
Aleca Va por buen camino
podes recorrer la tabla dos e ir agregandole los productos con la clausala 'or'
Código Delphi [-]
  while not tabla2.Eof do
  begin
    Filtro := Filtro + ' or Producto = ' + tabla2Producto;
    Tabla2.Next
  end;
  tabla3.filter := filtro;
algo asi.Aunque la opcion filter no me gusta mucho, habria que armar un sql.
__________________
Aleca
Responder Con Cita
  #5  
Antiguo 21-01-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Talking

Uuuuuuu te pasaste!!!! dejame provarlo y te cuento!!!!

lo de SQL seria muy interesante, pero la verdad, no se trabajar con SQL por eso trabajo solo con "CODIGO" como el que me acabas de dar... muchas gracias nuevamente, lo reviso y te cuento!!!
Responder Con Cita
  #6  
Antiguo 21-01-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Unhappy

Estimado, no me corre intento ejecutarlo asi:

Código Delphi [-]
procedure TPRODUCCIONBG.Change(Sender: TObject);
begin
  while not BDATOS.TMPRIMASF.Eof do
  begin
    Filtro := Filtro + ' or COD_INTERNO = ' + BDATOS.TMPRIMASF;
    BDATOS.MPRIMASF.Next
  end;
  BDATOS.TMPRIMAS.filter := Filtro;
end;

Me envia dos errores:

Código:
[DCC Error] PRODUCBG.pas(67): E2003 Undeclared identifier: 'Filtro'
Código:
[DCC Error] PRODUCBG.pas(67): E2015 Operator not applicable to this operand type
¿Que estoy haciendo mal?, gracias por la paciencia...
Responder Con Cita
  #7  
Antiguo 21-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Lo que tienes que hacer es crear una relación Maestro=Detalle. Para hacerlo, haz lo siguiente:
1. En la TABLA2 establece la propiedad MasterDataset al TDatasource asociado a TABLA1.
2. Nuevamente en TABLA2, establece la propiedad MasterField a "COD_INTERNO" (sin las comillas). COD_INTERNO me imagino que el el campo que indican la relación que tiene un producto con las materias primas.

Si tienes un problema, no dudes en comentarlo y dar la mayor información posible del problema.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 21-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 22
Aleca Va por buen camino
Cita:
Empezado por Lenny Ver Mensaje
Estimado, no me corre intento ejecutarlo asi:


Código Delphi [-]procedure TPRODUCCIONBG.Change(Sender: TObject);
begin
while not BDATOS.TMPRIMASF.Eof do
begin
Filtro := Filtro + ' or COD_INTERNO = ' + BDATOS.TMPRIMASF;
BDATOS.MPRIMASF.Next
end;
BDATOS.TMPRIMAS.filter := Filtro;
end;




Me envia dos errores:

Código:
[DCC Error] PRODUCBG.pas(67): E2003 Undeclared identifier: 'Filtro'
Código:
[DCC Error] PRODUCBG.pas(67): E2015 Operator not applicable to this operand type
¿Que estoy haciendo mal?, gracias por la paciencia...
tenes que declarar Filtro: TString;
Código Delphi [-]
procedure TPRODUCCIONBG.Change(Sender: TObject);
var
  Filtro: String;
begin
  Filtro := '';
  while not BDATOS.TMPRIMASF.Eof do
  begin
       Filtro := Filtro + ' or COD_INTERNO = ' + chr(39) + BDATOS.PRIMASF.FieldByName('NOMBRE_CAMPO').ASstring + chr(39);
     BDATOS.MPRIMASF.Next
  end;
    BDATOS.TMPRIMAS.filter := Filtro;
  BDATOS.TMPRIMAS.Filtered := True;
end;
a ver ahora.
__________________
Aleca
Responder Con Cita
  #9  
Antiguo 21-01-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Unhappy Aun No Funciona!!! Help!!!

Estimados, e provado de las dos formas y las dos lansan el mismo error:

"Syntax Error"

Código Delphi [-]
procedure TPRODUCCIONBG.Button1Click(Sender: TObject);
var
Filtro: String;
begin
    while not BDATOS.TMPRIMASF.Eof do
  begin
    Filtro := Filtro + ' or COD_INTERNO = ' + BDATOS.TMPRIMASF.FieldByName('COD_INTERNO').ASstring;
    BDATOS.TMPRIMASF.Next
  end;
  BDATOS.TMPRIMAS.Filter := filtro;
end;

Código Delphi [-]
procedure TPRODUCCIONBG.Button2Click(Sender: TObject);
var
  Filtro: String;
begin
  Filtro := '';
  while not BDATOS.TMPRIMASF.Eof do
  begin
       Filtro := Filtro + ' or COD_INTERNO = ' + chr(39) + BDATOS.TMPRIMASF.FieldByName('COD_INTERNO').ASstring + chr(39);
     BDATOS.TMPRIMASF.Next
  end;
    BDATOS.TMPRIMAS.filter := Filtro;
  BDATOS.TMPRIMAS.Filtered := True;
end;

Lamento ser tan insistente... espero puedan ayudarme, de antemano gracias!!!
Responder Con Cita
  #10  
Antiguo 22-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 22
Aleca Va por buen camino
Cita:
Empezado por Lenny Ver Mensaje
Estimados, e provado de las dos formas y las dos lansan el mismo error:

"Syntax Error"


Código Delphi [-]procedure TPRODUCCIONBG.Button1Click(Sender: TObject);
var
Filtro: String;
begin
while not BDATOS.TMPRIMASF.Eof do
begin
Filtro := Filtro + ' or COD_INTERNO = ' + BDATOS.TMPRIMASF.FieldByName('COD_INTERNO').ASstring;
BDATOS.TMPRIMASF.Next
end;
BDATOS.TMPRIMAS.Filter := filtro;
end;





Código Delphi [-]procedure TPRODUCCIONBG.Button2Click(Sender: TObject);
var
Filtro: String;
begin
Filtro := '';
while not BDATOS.TMPRIMASF.Eof do
begin
Filtro := Filtro + ' or COD_INTERNO = ' + chr(39) + BDATOS.TMPRIMASF.FieldByName('COD_INTERNO').ASstring + chr(39);
BDATOS.TMPRIMASF.Next
end;
BDATOS.TMPRIMAS.filter := Filtro;
BDATOS.TMPRIMAS.Filtered := True;
end;




Lamento ser tan insistente... espero puedan ayudarme, de antemano gracias!!!
por las dudas
que es BDATOS ??
TMPrimas ??
__________________
Aleca
Responder Con Cita
  #11  
Antiguo 22-01-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Red face

BDATOS = DataSource
TMPRIMAS = Table3
TMPRIMASF = Table2

Cualquier otra pregunta estoy atento, muchas gracias por tu paciencia...
Responder Con Cita
  #12  
Antiguo 22-01-2011
Avatar de Aleca
Aleca Aleca is offline
Miembro
 
Registrado: may 2003
Ubicación: Venado Tuerto, Argentina
Posts: 277
Poder: 22
Aleca Va por buen camino
Cita:
Empezado por Lenny Ver Mensaje
BDATOS = DataSource
TMPRIMAS = Table3
TMPRIMASF = Table2

Cualquier otra pregunta estoy atento, muchas gracias por tu paciencia...
ahh, entonces seria así:
BDATOS.DataSet.Eof o (.First, etc)
BDATOS.DataSet.FieldByName('CAMPO').AsFloat
y si usas Tablas o Querys haces así
TMPRIMAS.Eof, TMPRIMAS.Next
TMPRIMAS.FieldByName('CAMPO').AsString por ejemplo.
__________________
Aleca
Responder Con Cita
  #13  
Antiguo 22-01-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Unhappy Aun sigue el error "Syntax error"

Aun no funciona...

Sigo en lo que me dicen y aun no resulta... ya estoy perdiendo las esperanzas, esto seria el codigo (mas ordenado):

Código Delphi [-]

procedure TPRODUCCIONBG.Button1Click(Sender: TObject);
var
Filtro: String;
begin 
while not ZTable2.Eof do  begin
Filtro := Filtro + ' or COD_INTERNO = ' + ZTable2.FieldByName('COD_INTERNO').ASstring;
ZTable2.Next  
end;
ZTable1.Filter := filtro;
end;

Código Delphi [-]
procedure TPRODUCCIONBG.Button2Click(Sender: TObject);
var
  Filtro: String;
begin
  Filtro := '';
  while not ZTable2.Eof do
  begin
       Filtro := Filtro + ' or COD_INTERNO = ' + chr(39) + ZTable2.FieldByName('COD_INTERNO').ASstring + chr(39);
     ZTable2.Next
  end;
  ZTable1.filter := Filtro;
  ZTable1.Filtered := True;
end;
Muy agradesido por la ayuda hasta ahora... cualquier duda estare atento...

PD: El COD_INTERNO es ALFANUMERICO por si acaso...

Última edición por Lenny fecha: 22-01-2011 a las 16:37:40.
Responder Con Cita
  #14  
Antiguo 22-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
Tal vez no entiendo pero pregunto:
Que hace la variable filtro si no contiene nada?.
aqui:
Filtro := Filtro no contiene nada, o por lo menos no lo veo el los ultimos codigos.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #15  
Antiguo 22-01-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Red face Lo que entendi...

Teoricamente, segun lo que entendi "FILTRO" deveria guarda los componentes de la FORMULA (materias primas) almacenados en la TABLA2 (materias primas necesarias + cantidad necesaria) Previamente Filtrada desde la TABLA1 que contiene el nombre del producto a fabricar, para luego filtrar la TABLA3 (todas las materias primas + Stock) con el resultado de la TABLA2, la idea es que TABLA2 y TABLA3 muestren las mismas materias primas para ver si existe STOCK suficiente antes de generar el pedido y descuento correspondiente...
Tengo todo previamente listo, como generar el descuento, solo me falta esto... si hay otra forma diferente, bienvenido sean todas las sugerencias y ayuda posible!!!

Espero no enredar mas las cosas con la explicacion, ante cualquier duda estare atento...

Gracias por la paciencia...
Responder Con Cita
  #16  
Antiguo 22-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
Teoricamente estas equivocado.
Analicemos tu codigo:

Aqui generamos la variable filtro, Vacia:
Código Delphi [-]
procedure TPRODUCCIONBG.Button1Click(Sender: TObject);
var
Filtro: String;
begin

Aqui decimos que mientras la tabla2 no encuentre su final continue.
La variable filtro sigue estando vacia:
Código Delphi [-]
while not ZTable2.Eof do  begin

Aqui indicamos que filtro (vacio) es igual a Filtro (vacio) mas todo lo demas y que es igual al file Cod_interno de la tabla2 que por ningun lado la veo abierta (supongo se abrio antes):
Código Delphi [-]
Filtro := Filtro + ' or COD_INTERNO = ' + ZTable2.FieldByName('COD_INTERNO').ASstring;
ZTable2.Next

Aqui decimos que la tabla 1 es igual que filtro vacio.
Código Delphi [-]
end;
ZTable1.Filter := filtro;
end;

Ahora: que informacion sacaras de algo vacio?, nada.
Por lo tanto me imagino que dara un error de sintaxis.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #17  
Antiguo 22-01-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Red face

Muchas gracias Caral, llego al depto y reviso paso a paso lo que me dices, tiene muchisima mas logica lo que tu me dices que lo que yo creo saber... Apenas lo revise te cuento como me fue...
Gracias!!!
Responder Con Cita
  #18  
Antiguo 22-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
El concepto de filtro es de logica y es muy sencillo.
Si quieres filtrar una tabla y ademas recorrerla para hacer la comparacion con otra tabla, primero tienes que recorrer las dos tablas, de ahi, crear dos filtros y hacer la comparación.
Si haces el recorrido de una y no de la otra, podras comparar los datos?, que crees?.
Ademas te falta algo basico y es activar el filtro, cosa que no estas haciendo.
Si te doy el codigo no aprenderas, intento que pienses en lo que te digo.
Si por ultimo no te sale, te doy un ejemplo, pero quiero que lo intentes.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #19  
Antiguo 22-01-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Red face Aun complicado...

Sigo desorientado... encuentro demasiado logico lo que dices pero aun no doy con la solucion, si podrias darme un ejemplo (no el codigo, tienes toda la razon en lo de aprender) estaria muy agradesido... esto me tiene de cabeza desde un par de dias y de tanto arbol ya no puedo ver el bosque...
Responder Con Cita
  #20  
Antiguo 22-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
Empecemos a quitar arboles.
Que quieres que haga el boton (Button1Click).
Paso a paso.
Saludos
__________________
Siempre Novato
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
Mostar datos de tabla en un grid y al hacer click en una celda desplegar otra tabla zheen Conexión con bases de datos 15 06-09-2010 20:43:47
Actualizar tabla con datos de otra tabla mediante UPDATE Rockin Firebird e Interbase 18 28-11-2007 19:15:42
filtrar tabla paradox y copiar a otra gerardo Tablas planas 5 15-05-2007 16:59:23
Actualizar un campo de una tabla con datos que se encuentran en otra tabla Morphine SQL 4 15-12-2006 22:47:42
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla taru MySQL 1 27-07-2006 15:36:12


La franja horaria es GMT +2. Ahora son las 18:28:08.


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