Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   DBLookupComboBoxs Master/Detail o Detail/Master (https://www.clubdelphi.com/foros/showthread.php?t=23626)

yusnerqui 22-07-2005 21:33:08

DBLookupComboBoxs Master/Detail o Detail/Master
 
Hola amigos, pues comienzo con decir que uso delphi6 y BD Access, para ejemplificar mi problema tengo 4 tablas:
Código:

  Provincia (Codigo:integer; Descripcion:String)
 
  Municipio (Codigo:Integer;Provincia:Integer; Descripcion:string) 
 
  Usuario(Codigo:Integer;Municipio:Integer; Nombre:string y otros)

Relaciono Master detail Provincia y Municipio, y como ven en la tabla de los usuarios solo almaceno los municipios, el hecho es que a la hora de editar le muestro al usuario en DBLookupComboBoxs estos dos campos(Provincia y Municipio), de manera que cuando este escoge una provincia determinada en el primer componente en el segundo solo le salen los municipios correspondientes a esta(hasta aquí todo bien).

El problema es que si me desplazo al siguiente registro y el municipio no pertenece a la provincia que está seleccionada en estos momentos el DBLookupComboBox que debe mostrar el municipio se queda en blanco, (comportamiento lógico en la relación Master/Detail).

Lo que necesito es evitar esto, se que si invierto la relación y pongo como master el municipio, me pondrá en el primer combo la provincia correcta, pero esto tiene el inconveniente que el usuario no podrá seleccionar otra si quiere hacer una modificativa, en fin estoy un poco confundido con el asunto, y creo que este tipo de interfases es bastante común. Si alguien puede ayudarme les estaría muy agradecido

Saludos Yusnerqui

yusnerqui 28-07-2005 14:31:56

Hola
 
Primero agradecer a tdos los que han leido mi mensaje.

Será que no se entendió bien, o que el filtrado por capas que pretendo establecer no se usa, si es lo segundo, como deberia implementar esto para que sea de fácil manejo para el usuario??

Saludos

Lepe 28-07-2005 18:52:08

Cita:

Empezado por yusnerqui
El problema es que si me desplazo al siguiente registro y el municipio no pertenece a la provincia que está seleccionada en estos momentos el DBLookupComboBox que debe mostrar el municipio se queda en blanco, (comportamiento lógico en la relación Master/Detail).

Lo que necesito es evitar esto

Mueve el dataset Master, en el AfterScroll del dataset Detail.

En el Dataset de Municipios, en el AfterScroll de su tabla, buscas el código de la provincia que le corresponde (usa DatasetProvincias.Locate), de esta forma, la provincia se actualiza. Al mover por código el Master, el Detail tambien se actualiza (el combo de Municipios).

Este comportamiento puede tener efectos colaterales, quizás tengas que habilitar el evento AfterScroll y deshabilitarlo por código.

¿Te sirve?

yusnerqui 28-07-2005 19:50:33

Hola
 
Pues me da un raro error ("No se pueden abrir más tablas o consultas"). Pero me gustaría saber si has probado esto alguna vez, pues según tengo entendido las filas visibles en la tabla detalles están limitadas por el rango implícito en la tabla maestra, lo que quiere decir que nunca cambiará a un municipio que no esté dentro de los que corresponden a la provincia seleccionada.



La alternativa que estoy pensando, es usar un tercer objeto Dataset que se conecte a la tabla física (Municipio), pero sin relación master/detail y sincronizar este último con los otros dos, de esta forma si cambiaria de municipio y podría probar tu método.



El problema ahora es que aumenta la cantidad de Datasets en el módulo, pero al no tener más alternativas....



Muchas gracias.



Saludos

Lepe 29-07-2005 12:04:57

Cita:

Empezado por Lepe
Este comportamiento puede tener efectos colaterales, quizás tengas que habilitar el evento AfterScroll y deshabilitarlo por código.

Lo que está ocurriendo ahora, es que al modificar la provincia desde el municipio, se actualiza la provincia, y como te decia, tambien se mueve el de Municipios, por tanto, se genera un nuevo AfterScroll de municipios, por lo que volvemos al principio y se vuelve a modificar el Maestro recursivamente e infinitamente .....

Supongo que tienes un DBNavigator, para moverte por los municipios, pues añade código a ese DBnavigator para que al pulsar Next, Prior, Last, Previous, haga la busqueda que necesitas y cambie el código del maestro. Deja en blanco el AfterScroll de Municipios.

Al hacer esto, ten en cuenta los eventos AfterScroll, beforeScroll de las tablas implicadas para que no vuelva a suceder algo parecido.

Siento no haber pensado bien la respuesta :o

yusnerqui 29-07-2005 18:40:20

Hola
 
Primero que todo gracias por tu tiempo.

Cita:

Empezado por lepe
Supongo que tienes un DBNavigator, para moverte por los municipios

No, tengo botones, para moverme por la tabla usuario, en la cual hay un campo que se llama municipio, como puedes ver en el primer mensaje.

Cita:

Empezado por lepe
pues añade código a ese DBnavigator para que al pulsar Next, Prior, Last, Previous, haga la busqueda que necesitas y cambie el código del maestro

Disculpa si soy reiterativo, pero es que la tabla municipio NUNCA tendra un código de provincia diferente a la provincia que está seleccionada en la tabla Provincia(Debido a la relación Master/Detail), es por esto que no se puede hacer la búsqueda.

Estoy a punto de dejar la idea de la relación Master/Detail e implementarlo por medio de filtros, lo que no se es que tan rápido será.

Gracias nuevamente, y si tienen otra idea, será de mucha utilidad.

Saludos.


La franja horaria es GMT +2. Ahora son las 15:43:26.

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