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 27-11-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 22
fortran Va por buen camino
Problema con ¿master-detail?

A ver si los gurús del foro me pueden ayudar con esto (y a ver si consigo hacerme entender con este problema).

Lo primero WXP, D5 y base de datos Paradox.

Lo siguiente

Tengo una tabla que es tablacitas, otra tablaclientes y otra tablaempleados.

tablaempleados es master de tablacitas

tablacitas tiene como campos fechacita, codigoempleado, y 24 campos que se cargan con dblookupcita1, dblookupcita2, dblookupcita3... y así sucesivamente, en estos el key_field es el codigocliente y el ListField es nombre y apellidos de la tablaclientes.

Para mostrar las citas diarias de cada empleado filtro estas por fechacita.


Bueno, hasta ahí todo va bien, el problema viene cuando trato de sacar todas las citas de un cliente. Para ello desengancho (o eso creo) el master detail, quito el filtro y llamo al formulario en el que se debería de ver.



Código:
procedure TFormularioPrincipal.BotonVercitasClienteClick(Sender: TObject);
Var
  miMaster             : TDataSource;
begin
   modulodedatos.Tablacitas.Filtered := false;
   miMaster:=modulodedatos.tablacitas.MasterSource;
   modulodedatos.tablacitas.MasterSource:= nil;
   Application.createForm(TFVerCitasCliente,FVerCitasCliente);
   FVerCitasCliente.showmodal;
   FVerCitasCliente.Free;
   modulodedatos.tablacitas.MasterSource:=MiMaster;
   modulodedatos.tablacitas.filtered := true;

end;
Dentro del form tengo dbgrid para seleccionar el cliente y un memo para ir listando las fechas de las citas.

Para llenar el memo hago lo siguiente:

Código:
procedure TFVerCitasCliente.DBGridClientesParaCitasCellClick(Column: TColumn);
var
   codigodelcliente     : integer;
   hay                  : boolean;

begin
   // Coger el codigodecliente
   codigodelcliente := modulodedatos.tablaclientescodigo_cliente.value;
    with modulodedatos do
   Begin
      Tablacitas.First;
      memo1.lines.Clear;
      while not modulodedatos.tablacitas.eof do
      Begin
        hay := false;
        hay := (tablacitascita1.value = codigodelcliente) or (tablacitascita2.value = codigodelcliente)or
               (tablacitascita3.value = codigodelcliente) or (tablacitascita4.value = codigodelcliente)or
               (tablacitascita5.value = codigodelcliente) or (tablacitascita6.value = codigodelcliente)or
               (tablacitascita7.value = codigodelcliente) or (tablacitascita8.value = codigodelcliente)or
               (tablacitascita9.value = codigodelcliente) or (tablacitascita10.value = codigodelcliente)or
               (tablacitascita11.value = codigodelcliente) or (tablacitascita12.value = codigodelcliente)or
               (tablacitascita13.value = codigodelcliente) or (tablacitascita14.value = codigodelcliente)or
               (tablacitascita15.value = codigodelcliente) or (tablacitascita16.value = codigodelcliente)or
               (tablacitascita17.value = codigodelcliente) or (tablacitascita18.value = codigodelcliente)or
               (tablacitascita19.value = codigodelcliente) or (tablacitascita20.value = codigodelcliente)or
               (tablacitascita21.value = codigodelcliente) or (tablacitascita22.value = codigodelcliente)or
               (tablacitascita23.value = codigodelcliente) or (tablacitascita24.value = codigodelcliente);
        if hay then
        memo1.Lines.append(datetostr(tablacitasfechacita.value));
        tablacitas.next;
      End;

   End;
end;
El problema es que cada vez que hago click en cualquier casilla del dbgrid se me desplaza automáticamente al cliente que más entradas tiene en la lista aunque los valores del memo los pone bien.

Le he dado mil vueltas al asunto y sigo si ver la solución. A ver si alguien me puede dar una pista.

Gracias por la atención y perdón por el rollo.
__________________
- ¿Y cuando dejaré de aprender maestro?.

- El día que te mueras pequeño saltamontes.
Responder Con Cita
  #2  
Antiguo 08-12-2003
buitrago buitrago is offline
Miembro
 
Registrado: sep 2003
Posts: 156
Poder: 22
buitrago Va por buen camino
No entendí "niente"........

EL Master - detail (aun sin comprender nada) lleva tres Propiedades que llenar, recuerda.

saludos

Fer
Responder Con Cita
  #3  
Antiguo 09-12-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola Fortran:

Después de leer tres o cuatro veces tu mensaje, creo haberte entendido,

No entiendo que se desplace por la tabla de clientes cuando navegas por ese Grid. De hecho, los campos enlazados como LookUp a otra tabla, utilizan el método LookUp para buscar el registro correspondiente, y éste método no realiza ningún desplazamiento. Otra cosa es si usaras un Locate o un FindKey o algo así, que sí resituan el registro activo.

Aún así, quiero avisarte de que los 24 campos lookup realizan cada uno su búsqueda, es decir, ninguno se aprovecha de la búsqueda de su campo "hermano", auqnue sea sobre la misma tabla y con la misma clave y valor. Eso en un Grid puede resultar algo lento, si se están visualizando unas cuantas filas. Quizás no fuera mala idea redefinir esos campos LookUp como Calculated y en el OnCalFields hacer tú mismo la búsqueda y asignar valores. PERO ESO SÍ, debería ser sobre una tabla auxiliar de clientes, no enlazada a ningún control DBAware.

En cuanto a por qué se desplaza a ese registro en Clientes, tengo la misma duda que tú, revisa que no llames en nijgún evento a dicha tabla. No sé lo que pueda ser.

Saludos
__________________
Guía de Estilo
Responder Con Cita
  #4  
Antiguo 10-12-2003
fortran fortran is offline
Miembro
 
Registrado: may 2003
Ubicación: Asturias
Posts: 63
Poder: 22
fortran Va por buen camino
Gracias por la contestación, en cuanto haga algo (aun no tengo muy claro que) te lo haré saber, de momento (y de manera provisional) he marcado el registro en el que está el cliente y al terminar las búsquedas lo obligo a volver a ese registro.
__________________
- ¿Y cuando dejaré de aprender maestro?.

- El día que te mueras pequeño saltamontes.
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


La franja horaria es GMT +2. Ahora son las 00:48:06.


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