Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Claves compuestas en DBLookupComboBox (https://www.clubdelphi.com/foros/showthread.php?t=30316)

Mauro.NET 03-04-2006 17:22:12

Claves compuestas en DBLookupComboBox
 
Hola amigos, como andan. Lo que planteo es un problema de flexibilidad sobre la programacion del componente DBLookupComboBox ante claves compuestas en el KeyField y DataField. Estas propiedades permiten especificar un solo campo nada más?. Intenté escribir los campos involucrados separados con coma pero no funciona. Parece que la única forma de hacerlo es programar sobre el evento OnChange del componente para guardar los campos clave del dataset origen en el data set destino, pero dificulta un poco el mantenimiento cuando esta situación se repite en varias instancias del sistema. Tal vez es mi costumbre de programar con objetos DataAware.

Para que entiendan la situacion, les ejemplifico las tablas:

FamiliaCta
ID_Rubro [CP]
ID_Familia [CP]
Descripcion

SubFamiliaCta
ID_Rubro [CP]
ID_Familia [CP]
ID_SubFamilia [CP]
Descripcion

Entonces las propiedades del componente desearía que fueran asi:

ListSource = dsFamilia
ListField = Descripcion
KeyField = ID_Rubro, ID_Familia
DataSource = dsSubFamilia
DataField = ID_Rubro, ID_Familia

También hice la prueba con el RxDBLookupCombo pero no tampoco pude.
En síntesis, necesito saber si es posible establecer más de un campo sobre las propiedades KeyField y DataField.

Mucha s Gracias

Chente(rMan) 03-04-2006 17:50:45

Cita:

Que bueno que ya esta arriba el club de nuevo.
Bueno Mauro, que yo sepa eso no se puede hacer, aunque no lo he intentado, lo que si puedes hacer es mostrar en tu DBLookupComboBox, mas de un campo por ejemplo, a la propiedad ListField ponle esto ID_Rubro; ID_Familia; Descripcion y veras lo que pasa.



Saludos.

vtdeleon 03-04-2006 17:55:15

Saludos

1ro no pudes usar DataSource y ListSource al mismo tiempo es uno o otro. Y creo que para el caso es mejor usar ListSource.

KeyField no puede usar campos compuestos, pero si ListField separandolos por punto y coma ( ; ) .

Mauro.NET 03-04-2006 18:44:29

Perfecto amigos! me sacaron una gran duda de encima, y gracias por la calidad y la rapidés de sus respuestas... sigan asi.

Un saludo

roman 03-04-2006 19:13:36

Cita:

Empezado por vtdeleon
no pudes usar DataSource y ListSource al mismo tiempo es uno o otro.

Disculpa Van Troi, pero esto es incorrecto o no entiendo lo que quieres decir. Un DBLookupCombobox sirve, como cualquier otro control de datos, para editar el campo indicado por DataSource y DataField. ListSource corresponde al dataset que provee los valores a mostrar y cuyo KeyValue será el que se asigne al DataField. Lo cierto es que en ocasiones no nos interesa realmente editar un campo sino sólo mostrar los valores provenientes de un dataset. Entonces podemos prescindir de DataSource, pero no son opciones exclusivas una de otra.

// Saludos

Chente(rMan) 03-04-2006 23:26:34

Cita:

Empezado por vtdeleon
Saludos
1ro no pudes usar DataSource y ListSource al mismo tiempo es uno o otro. Y creo que para el caso es mejor usar ListSource.

De hecho si se puedo, y es muy funcional, prueba a hacer unas pruebitas y te encantará.


Saludos.

vtdeleon 04-04-2006 00:37:26

Saludos

Cita:

De hecho si se puedo, y es muy funcional, prueba a hacer unas pruebitas y te encantará.
De que se puede, se puede.
Quizas me expresé mal, me referia a usar el mismo datasource para las propiedades ListSource y DataSource; no se ustedes pero a mi me da un error de "Circular datalink...", al momento de asignar el campo necesario.

Jonnathan 05-04-2006 22:44:46

Les comento que esto de usar claves compuestas hubiese sido muy util si lo hubiesen colocado directamente pero no fue asi, el lookup solo admite un campo para relacionar ambas tablas. Sin embargo estoy trabajando en una aplicación donde necesitaba algo asi, así que la alternativa que tuve fue crear un campo especial concatenando los valores de las claves compuestas en un TQuery. Por ejemplo:

Código:

SELECT
*, (ID_Rubro || ID_Familia) as RUBRO_FAMILIA
FROM FamiliaCta

SELECT
*, (ID_Rubro || ID_Familia) as RUBRO_FAMILIA
FROM SubFamiliaCta

Usas el campo RUBRO_FAMILIA como KeyField en el LookupCombo y listo, una clave compuesta :cool: . La única desventaja es que para actualizar esta consulta deberas usar objetos TUpdateSQL y llamadas a ApplyUpdates, pero ese es otro cuento, saludos.


La franja horaria es GMT +2. Ahora son las 06:21:34.

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