Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda con consulta de combinación entre tablas. (https://www.clubdelphi.com/foros/showthread.php?t=42420)

Roilo 13-04-2007 16:44:43

Ayuda con consulta de combinación entre tablas.
 
Un abrazo al foro.
En realidad no se trata de una simple consulta. Me gustaría que analizaran el siguiente caso y me dieran algunas ideas.
Resulta que tendo dos tabla. Una que contiene las áreas de mi empresa y otra que contiene todas las partidas que deben ser planificadas. Por ejemplo el petroleo, productos químicos, gasolina, carbon, entre otros 300 aproximadamente.
El caso es que hay areas que no deben planificar el petróleo, por ejemplo.
yo necesito que cuando el usurio especifique su area, en una tabla aparescan las partidas que le corresponden a esa area.

Les hago un dibujo de cada tabla para que tengan una mejor idea :

Tabla de areas:
id nombre
1 instrumentacion
2 laboratorio central
3 computacion
4 seguridad
5 recursos humanos

Tabla de partidas
id Partida
1 Petroleo
2 Amoniaco
3 papel
4 salario
5 aceites
.
.
.

Resumen: quiero que cuando escriba recursos humanos me salga la siguiente tabla :
id partida
3 papel
4 salario

ESPERO me hallan entendido...Espero alguna idea mucho más censilla que las tantas que tengo en la cabeza.
Gracias de antemanos.

marcoszorrilla 13-04-2007 17:02:20

Tendrás que crear una tercera tabla en donde se grabará.

id nombre----->id Partidas

Ejemplo.

5 - 3
5- 4

ó

5 - Papel
5 - Salario


Un Saludo.



Lepe 13-04-2007 17:02:43

Necesitas una tercera tabla de configuracion, por ejemplo:

Tabla: ConfigAreas
Dos campos que son clave ajena de las tablas Areas y partidas, y además juntas, forman la clave primaria de esta nueva tabla.
Código:

IdArea  idPartida
  5      3
  5      4

Creas una ventana para manipular esa configuración.

A partir de ahora, cuando quieras ver las partidas de un área determinado, haces una consulta como esta:
Código SQL [-]
select * from partidas
where idpartida in (select idpartida from ConfigAreas where idArea = 5)

Vaya, marcos se me ha adelantado :D

Saludos

Roilo 13-04-2007 17:50:26

Bueno!!!
 
Gracias...Ahora se me ocurre administrar esta tercera tabla desde un formulario delphi. Suponiendo que el administrador introdusca el area y en un DbGrid que contenga todas la partidas, el administrador iria marcando las apartidas que esa area debe planificar. Se me ocurre poder tener un checkbox a la izquierda de cada partida. Si es marcada ya ustedes saben y luego...
Me pregunto como puedo lograr lo del CheckBox...
Gracias de antemanos.:)

marcoszorrilla 13-04-2007 17:57:41

Aquí tienes código que utilizo para poner un DbCheckbox que inicialmente estará como no visible y conectado al campo de la tabla que pretendenmos modificar, sobra algo de código pero te lo pego tal cual. A la rejilla para mayor claridad le ha renombrado Reja.
Código Delphi [-]
procedure TfrConAlbaran.RejaColEnter(Sender: TObject);
begin

  if Estado = 2 then
  begin
    if Reja.Columns [Reja.SelectedIndex].
        Field = DmHH.AlbCobrado  then
      DbchkCobrado.Visible := True
    else
      DbchkCobrado.Visible := False;
  end;

end;



procedure TfrConAlbaran.RejaDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
   if DmHH.Albcobrado.Value = false then
   begin
   Reja.Canvas.Brush.Color :=clAqua;
   Reja.Canvas.Font.Color:=clRed;
   Reja.DefaultDrawColumnCell(Rect,Datacol,Column,State);
   end;

  if Estado = 2 then
  begin
    if (gdFocused in State) and
        (Column.Field = DmHH.AlbCobrado) then
      begin
        DbchkCobrado.SetBounds (
          Rect.Left + Reja.Left + 1,
          Rect.Top + Reja.Top + 1,
          Rect.Right - Rect.Left,
          Rect.Bottom - Rect.Top);
      end;
  end;

end;

procedure TfrConAlbaran.RejaKeyPress(Sender: TObject; var Key: Char);
begin
  if Estado = 2 then
  begin
    if DbchkCobrado.Visible and (Ord (Key) > 31) then
    begin
      Key := #0;
      DmHH.Alb.Edit;
      DbchkCobrado.Checked := not
        DbchkCobrado.Checked;
      DbchkCobrado.Field.AsBoolean :=
      DbchkCobrado.Checked;
      end;
    end;
end;


Una aclaración la variable estado la utilizo para saber si la fuente de datos está en modo edición o consulta antes de abrir la rejilla y segun que en el menú de la aplicación se elija consultas o modificar Estado es igual a 3 ó 2, puesto que el uno lo utilizo para las altas.
Un Saludo

Roilo 13-04-2007 19:43:24

Ohhhh!!!!
 
Lo siento pero me siento un novato delante de este código...
Me preguntaba si este código me coloca un CheckBox al lado de cada registro en la tabla de partidas. Así selecciono el area y marco las partidas para esta area. Luego quedaría construir la tabla 3.
GRACIAS ...

Lepe 13-04-2007 19:58:32

Yo quizás hubiera usado un Listbox, por aquello de que tiene multiSelección y puede ser más cómodo para el usuario, elige con CTRL o Shift todas las partidas y después las pasa a otro Listbox, es más trabajo para tí, pero piensa en el pobre usuario dando clics a todos los checkbox cuando tenga las 300 partidas que comentas y 20 áreas.

Delphi trae un Form ya diseñado con 2 listbox, donde se puede arrastrar y soltar y pasar de unos a otros, File -> new -> Dialogs (me parece que es la pestaña).

Saludos.

Roilo 13-04-2007 21:35:59

Ok!!!
 
Creo que me quedo con esta Lepe...:)
Gracias a todos.


La franja horaria es GMT +2. Ahora son las 03:54:24.

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