Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Lookup al pulsar sobre una columna en TDBGrid

Hola, tengo una aplicación con varias tablas que las muestro en un componente TDBGrid.

Os pongo un ejemplo de tres tablas para que veáis que es lo que quiero hacer.

Tengo una tabla que se llama Alumno con los campos Identificador y Nombre, otra tabla llamada Profesor con los campos Codigo y Asignatura y luego tengo una clase Aula con los campos Numero, Alumno, Profesor, Capacidad.

Tenemos estos datos:

Código:
Alumno: 

+-+-------+
|1|Pedro  |
|2|Victor |
|3|Marcos |
+-+-------+

Profesor:

+-+-----------+
|1|J. Antonio |
|2|Carlos     |
|3|Eva        |
+-+-----------+

y la tabla Aula la relleno sólo con alumnos y profesores existentes:

+-+-+-+--+
|1|1|3|30|
|2|2|3|21|      
+-+-+-+--+
Lo que yo quiero es no tener que escribir los datos referentes a los campos Alumno y Profesor de la tabla Aula sino que al pulsar sobre esos campos me salga automáticamente la tabla correspondiente para que yo coja ese registro y me traiga el código para insertarlo en esa columna, creo que esto se llama Lookup.

¿Es esto posible? Muchas gracias.

Última edición por noob fecha: 20-10-2008 a las 14:51:15.
Responder Con Cita
  #2  
Antiguo 20-10-2008
Palmiro Palmiro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Argentina - Chaco
Posts: 57
Poder: 19
Palmiro Va por buen camino
hola...

revisa este link, a ver si te sirve...
__________________
No es lo mejor, pero es lo que hay...
Responder Con Cita
  #3  
Antiguo 20-10-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
No lo consigo , ¿me podéis echar un cable con un código de ejemplo?

He hecho esto:

Código Delphi [-]
(DBGrid1.Columns[1] as TColumn).Field.FieldKind := fklookup;
(DBGrid1.Columns[1] as TColumn).Field.KeyFields := 'Codigo';
(DBGrid1.Columns[1] as TColumn).Field.DataSet := AlumnoDataset;
(DBGrid1.Columns[1] as TColumn).Field.LookupKeyFields := 'Alumno';
(DBGrid1.Columns[1] as TColumn).Field.LookupResultField := 'Alumno';
¿Voy bien?

Donde el dataset del datasource de DBGrid1 esta tirando de la tabla aula.

Muchas gracias.

EDITO: He hecho esto:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  ListaAlumnos: TStringList;
  i: integer;
begin
  ListaAlumnos := TStringList.Create;
  try
    AlumnosDataset.Active := true;
    AlumnosDataset.First;
    AlumnosDataset.DisableControls;
    while not AlumnosDataset.EOF do
      begin
        ListaAlumnos.Add(AlumnosDataset.FieldByName('Identificador').AsString);
        AlumnosDataset.Next;
      end;
  finally
    AlumnosDataset.Active := false;
    for i := 0 to DBGrid1.Columns.Count - 1 do
      begin
        if AlumnosDataset.FieldName = 'Alumno' then
          begin
            DBGrid1.Columns[i].PickList := ListaAlumnos;
            Break;
          end;
      end; 
    AlumnosDataset.EnableControls;
    ListaAlumnos.Free;
  end;

Así me sale un desplegable al pulsar en la columna Alumno de la tabla Aula en vez de abrírseme la tabla Alumno con todos los registros. ¿Sabéis cómo hacerlo del otro modo?

Última edición por noob fecha: 20-10-2008 a las 16:28:21.
Responder Con Cita
  #4  
Antiguo 21-10-2008
Palmiro Palmiro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Argentina - Chaco
Posts: 57
Poder: 19
Palmiro Va por buen camino
man la verdad que no entiendo muy bien lo que haces...
seguiste al pie de la letra lo que dice el link?
yo lo segui tal cual esta y sale perfecto aunque nunca llegue a utilizarlo...

Mañana te paso algun ejemplo de codigo... ahora no tengo el delphi a mano y ademas tengo un poco de sueño...
__________________
No es lo mejor, pero es lo que hay...
Responder Con Cita
  #5  
Antiguo 21-10-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Vale, gracias por preocuparte, espero tu ejemplo de código.

Saludos.
Responder Con Cita
  #6  
Antiguo 21-10-2008
Palmiro Palmiro is offline
Miembro
 
Registrado: oct 2005
Ubicación: Argentina - Chaco
Posts: 57
Poder: 19
Palmiro Va por buen camino
primero que nada agrega a tu form un componente DBLookupComboBox

en el ListSource---> aqui enlasa el query que queres que se vea al desplegarlo...
en DataSource---> aqui enlasa el query en cual vas a referenciar con el ListSource....
para este ejemplo tengamos en cuenta que estas por decir de que provincia o estado es una persona.....
ListSource-----qryProvincia
DataSource----qryPersona

En listField: pone pcia.nombre;nombre.pais
KeyField: pone id_pcia
DataField : pone el nombre de la clave provincia en la tabla persona, por ej. pna.id_pcia

Visible:= False;

Luego tenes que copiar este codigo en el evente DBGrid1DrawColumnCell
de la grilla
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell  (Sender: TObject;    const Rect: TRect;    DataCol: Integer;    Column: TColumn;    State: TGridDrawState);begin  if (gdFocused in State) then  begin    if (Column.Field.FieldName =  'provincia') then    with DBLookupComboBox1 do     begin      Left := Rect.Left + DBGrid1.Left + 2;      Top := Rect.Top + DBGrid1.Top + 2;      Width := Rect.Right - Rect.Left;      Width := Rect.Right - Rect.Left;      Height := Rect.Bottom - Rect.Top;      Visible := True;    end;  endend;
Código Delphi [-]
procedure TForm1.DBGrid1ColExit(Sender: TObject); begin if DBGrid1.SelectedField.FieldName = 'provincia' then DBLookupComboBox1.Visible := False end;
proba con eso..... espero haberme expresado bien... es muy probable que tengas que hacer unos cambios.... pero la idea es esa.Lo hice a ojo sin probarlo... no te sale.... hago un código de ejemplode verdad y te lo adjunto....Contanos despues como te fue, asi le sirve de ayuda el ejemplo otro que se encuentre con el mismo problema....
__________________
No es lo mejor, pero es lo que hay...
Responder Con Cita
  #7  
Antiguo 21-10-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Gracias, me sirvió.

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
Ayuda para asignar campo a columna de TDBGrid kaozz OOP 3 17-07-2007 03:07:47
Dibujar encabezado Columna TDBGrid eureka OOP 3 21-11-2005 03:02:44
Como Ordenar Un Tdbgrid Con Clic En Columna cmena Varios 4 03-05-2004 16:52:34
Como Ordenar Un Tdbgrid Con Clic En Columna cmena Conexión con bases de datos 2 30-04-2004 19:01:12
Como Fijar Una Columna De Un Tdbgrid cmena Varios 0 22-04-2004 18:41:37


La franja horaria es GMT +2. Ahora son las 21:16:12.


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