PDA

Ver la Versión Completa : Relaciones entre tablas mediante combobox


efs
17-06-2005, 05:06:30
Que tal, agradezco desde ya su ayuda con este tema ya que no tengo mucha idea de como manejarlo.

Mi problema no es para un caso en particular sino que estoy iniciando un programa y no se como manejar las relacionas entre las tablas.
Estoy trabajando con delphi 7 y firebird, y el caso es que tengo varias tablas, todas con un campo nombretabla_id autoincremental mediante generadores (primary key), y para las tablas relacionadas a esta una referencia al campo id de la tabla a la cual estan relacionadas (nombretablarelacionada_id).
El problema general es que yo quiero mostrar en una pantalla A (que tiene los campos de su correspondiente tabla para edicion mediante IBDataset) un combobox con los datos de un determinado campo de una tabla relacionada a esta, que me muestre todos los datos de ese campo de esa tabla y que yo al seleccionar uno y poner aceptar me guarde la relacion (es decir el id de la tabla relacionada en la que yo estoy usando) y bueno, al editarlo y cambiarlo me lo cambie.

No tengo mucha idea de como manejarlo asi que cualquier tipo de ayuda se las agradezco y logicamente si piensan que lo mejor seria hacerlo de otra forma tambien les agradezco tambien la informacion.
Un saludo.

roman
17-06-2005, 07:05:42
Supongamos que tienes una tabla de personas y una de paises

personas = (id, nombre, pais_id)
paises = (id, nombre)

Muestras la tabla personas en un DBGrid y quieres mostrar en un combo la lista de (nombres de) países de manera que al seleccionar uno, se actualice el campo pais_id.

¿Es así?

A veces es mejor no ser tan abstracto y poner un ejemplo concreto para fijar ideas.

Como no trabajo con FireBird, desconozco cuál pueda ser la mejor opción. Pero puedes revisar este mensaje (http://www.clubdelphi.com/foros/showpost.php?p=92747&postcount=5) en el que explico cómo agregar un campo "lookup" de manera que el combo te aparezca dentro del dbgrid.

Otra forma sería usar un DBLookupComboBox ajustando sus propiedades:

DataSource <-- IBDataSetPersonas
DataField <-- pais_id
ListSource <-- IBDataSetPaises
ListField <-- nombre
KeyField <-- id

En este caso el combo estaría fuera del dbgrid.

// Saludos

efs
17-06-2005, 15:03:58
Muchas gracias roman, disculpa por no especificar mas el problema pero entendiste perfecto, era justamente eso lo que necesitaba (el segundo caso, el combo fuera del dbrid).
Nuevamente muchas gracias y un saludo.