Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problema campos de busqueda (https://www.clubdelphi.com/foros/showthread.php?t=28859)

Luis Castillo 04-01-2006 19:28:33

Problema campos de busqueda
 
A ver colegas.....es un poquito largo mi comentario pero empezemos:

Estoy trabajando en Interbase y Delphi 7, con componentes IBX (especialmente IBDataSet).

Tengo por ejemplo la siguiente estructura:

Código PHP:

PERSONA (CEDULANOMBRESID_DEPARTAMENTOID_MUNICIPIOID_BARRIO)
DEPARTAMENTO (ID_DEPARTAMENTONOMBRE)
MUNICIPIO (ID_MUNICIPIONOMBREID_DEPARTAMENTO)
BARRIO (ID_BARRIONOMBREID_DEPARTAMENTOID_MUNICIPIO

En una forma muestro la tabla PERSONA con componentes DBEdit etc...
En esta forma se puede insertar, editar, eliminar y navegar. Con los campos ID_Departamento, ID_Municipio, ID_Barrio hago campos de busqueda que referencia cada uno a la tabla correspondiente (para mostrar el nombre y no el codigo !!claro!!! en realidad referencian a consultas de estas tablas....).

El funcionamiento ideal de esto es que cuando vaya a insertar una PERSONA y escoga el departamento "X", cuando vaya a escoger el MUNICIPIO se muestre en la lista los municipios del departamento seleccionado en el Lockup de DEPARTAMENTO. Y asi con el barrio. Yo tengo las consultas referenciadas de DEPARTAMENTO, MUNICIPIO, Y BARRIO relacionadas en algo asi como MASTER/DETAIL por medio de la propiedad DATASOURCE de la consulta y agragegando el parametro correspondiente...(ustedes saben como es la cuestion...)

Pero el problema es que cuando hago operaciones (insertar editar) y al seleccionar el departamento, y luego el municipio, en el Lockup del municipio se muestra vacio. Tengo entendio que cuando selecciono el departamento se cambia la fila activa y debe restringir los registros mostrados en el municipio (debido a la relacion master/detali). Incluso cuando abro la tabla y esta en modo dsBrowse me muestra el departamento y no el municipio (teniendo el campo ID_MUNICiPIO asignado un valor correcto)

Le quite la relacion master/detail y parece ser que funciona bien. Pero no le brinda la facilidad y poco riesgo al usuario de seleccionar siempre un municipio deacuerdo al departamento (para evitar inconsistencia)

Les agradezco cualquier sugerencia....muchas Gracias...

Iseberiano 04-01-2006 20:45:25

Luis,

has probado de utilizar la propiedad Filter? En vez del Master / Detail? Es un poco mas laborioso pero a mi me funciona mejor.

Un saludo

aledieb 04-01-2006 23:12:43

Y si parametrizas los querys de los departamentos según elija el usuario. por ejemplo en el onchange del lookup.

rastafarey 05-01-2006 14:26:49

Resp
 
Normal mente yo trabajaba con los lookup con ibo y no es necesario estar cambiando los master por estos se realmar automaticamente al cambiar el padre y hacen filtros sino que relenazan la instruccion sql al servidor.

Si esto me funcionaba perfecto pero tube algunos casos donde habia qu etenr hasta 30 o mas lookup y el modulo s etarbabo mucho entonces preferi cambiar la forma de trabajar y editar sobre campos de edicion y al salir del campo si esta ba en estado d eedicion o insercio entonces se realiza la busqueda en la respectiva tabla se actualizan los campos id y se actualiza la informacion a amostrar en pantalla y si no s encontro ninguna concidencia se levnata un modulo respectivo para que incluiyan o busuqen d emanera mas especifica y si se los patrones encuantran mas d euna concidencia se leevanta una ventana con la lista para que se seleccion el que desee.

Si se aran dado cuenta solo se habre un data set y precisamente en el momeneto de la consulta es que se va abriendo la consulta necesaria para lu busqueda. Cuando no se esta insertando datos solo se tien e un data set activo en vez de tener tambien los relacionados con lookup abierto. Pero el unico inconveniente que se tiene es qeu como en la inturccion select hay campos que son canculador ya que dicha tabla solo tiene lo ids los campos calculados nose pueden editar pero yo lo slucione haciendo procedimeintos para insercion y modificacion la cuan les pasaba los campos calculados que a la final no hacen nada sino que simplemente es para que permitir que estos se editen y se inserten pero en verda los campos qu es einsertar los los que en relidad estan en la tabla.

Luis Castillo 05-01-2006 19:00:26

No existe
 
Cita:

Empezado por aledieb
Y si parametrizas los querys de los departamentos según elija el usuario. por ejemplo en el onchange del lookup.

ESta bien... eso seria lo ideal pero el TDBLookupCombobox no tiene el evento onchange (que desgracia no?). He puesto la filtracion en el Onchange del datasource, he intentado en el afterscroll de la tabla, pero nada me forma el conflicto dicho arriba.......

Luis Castillo 05-01-2006 19:07:23

Enredado..
 
Colega rastafarey , parece que tu comentario tiene contenido importante, pero por favor aclarame la sintaxis porque hay cosas que no entiendo y me hacen no entender la intencion del mensaje

Cita:

Normal mente yo trabajaba con los lookup con ibo y no es necesario estar cambiando los master por estos se realmar automaticamente al cambiar el padre y hacen filtros sino que relenazan la instruccion sql al servidor.
habia qu etenr


Te agradeceria me respondas

aledieb 05-01-2006 20:21:29

Es cierto
 
Cita:

Empezado por Luis Castillo
ESta bien... eso seria lo ideal pero el TDBLookupCombobox no tiene el evento onchange (que desgracia no?). He puesto la filtracion en el Onchange del datasource, he intentado en el afterscroll de la tabla, pero nada me forma el conflicto dicho arriba.......

Es cierto, no lo tiene, pero tal ves te sirva el OnCloseUp, OnEnter u OnExit ó los tres.

En caso de apuro lo hice así, hasta que cambie al JvDBLookupCombo de la JEDI VCL, que si lo tiene.

rastafarey 06-01-2006 16:55:23

Resp
 
Trato de explicar de mejor manera.

Lo que explique anteriormente no es para resolver el problema de la manera que lo planteas sino desde mi punto d evista d euna manera mas eficiente.

Es tan simple como tratr de evitar los lookup y tener que abrir dataset extras.

Ejemplo. Teienes una tabla donde hay un ide externo a personas por el campo id persona.

Como solo tiene sid persona. Pero como es mas comodo buscar por nombre y codigo entonces en eel formulario tendrias codigo y nombre persona, caundo se esta insertando o modificando dependiendo del dato que se introdujo en dicho campo realizar un abusque day cargar los datos a id persona. pero tienes el inconveniente qie no puedes editar ni codigo persona y nombre persona ya seran campos calculados entonce eso o solucionas con un procedimeinto.


La franja horaria es GMT +2. Ahora son las 06:03:04.

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