Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Sincronía entre 2 TDBLookupComboBox con la misma TQuery (https://www.clubdelphi.com/foros/showthread.php?t=41980)

kuan-yiu 30-03-2007 15:31:01

Sincronía entre 2 TDBLookupComboBox con la misma TQuery
 
Hola a tod@s.
Tengo un par de TDBLookupComboBox en un formulario de altas/modificación que utilizan la misma consulta.
Código SQL [-]
select codigo, siglas, nombre
from empresa
order by nombre
Ambos tienen el mismo "ListSource" y "KeyField" (codigo), pero uno muestra las siglas y otro el nombre en "ListField".
Yo pensé que ambos estarían sincronizados: que al seleccionar las siglas aparecería el nombre o que al seleccionar el nombre aparecerían las siglas, pero no es así. Funcionan de un modo totalmente independiente.

¿Como se consigue ese efecto? ¿Debo utilizar otro componente?

Cañones 30-03-2007 15:36:50

Me parece que si utilizas un ClienDataSet para proveerle los datos van a funcionar sincronizados, porque el registro activo es uno, en cambio con el TQuery navega por la consulta, creo que es asi.
Espero que te sirva.
Saludos.

kuan-yiu 30-03-2007 15:49:28

Disculpa, se me olvidaron un par de datos.
Tengo Delphi7 y Oracle9i.

Utilizo un DataSource para eso, ¿en que se diferencia del ClienDataSet?

LordRiper 30-03-2007 22:26:15

En el evento OnChange de cada uno le reseteas el Value al otro, solo recuerda desactivar el OnChange del combo al que le vas a cambiar el texto, porque sino se cicla...

kuan-yiu 02-04-2007 11:19:28

Los TDBLookupComboBox no tienen el evento "OnChange". El TDataSource con el que enlazo la TQuery con ellos tiene el evento "OnDataChange" pero no me resulta fácil usarlo para rellenar esos componentes porque el formulario lo tengo por una parte y las consultas las tengo en un "DataModule".

kuan-yiu 02-04-2007 11:44:24

En espera de encontrar una solución más satisfactoria tengo esto:
Código Delphi [-]
procedure TfFactProvExt.DBlcbSiglasClick(Sender: TObject);
begin
  if (flagEmpresa) then
    begin
      flagEmpresa := FALSE;
      DBlcbEmpresa.KeyValue := DBlcbSiglas.KeyValue;
      flagEmpresa := TRUE;
    end;
end;

procedure TfFactProvExt.DBlcbEmpresaClick(Sender: TObject);
begin
  if (flagEmpresa) then
    begin
      flagEmpresa := FALSE;
      DBlcbSiglas.KeyValue := DBlcbEmpresa.KeyValue;
      flagEmpresa := TRUE;
    end;
end;
No me gusta demasiado pero por lo menos me permite seguir avanzando con el resto de las cosas.

Lepe 02-04-2007 17:43:49

Entendería el uso de 2 controles si cada uno tuviese una ordenación, por ejemplo, el combo de siglas ordenado alfabéticamente por siglas y lo mismo para el DBLookUpCombo de nombres.

Si los dos LookupCombo tienen el mismo ListSource, que está ordenado por nombre, ¿por qué no usas un solo Lookupcombo? La propiedad Listfield a:

siglas;nombre

Así mostrará las dos cosas dentro del mismo Combo.

Saludos

kuan-yiu 03-04-2007 10:15:54

Es una cuestión de comodidad para el operario, a petición suya. Tiene que seleccionar la empresa y quiere poder hacerlo usando ambos campos: las siglas en la mayoría de los casos y el nombre en situaciones muy contadas.


La franja horaria es GMT +2. Ahora son las 19:00:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi