Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   saber el valor de un campo lookup de un dataset (https://www.clubdelphi.com/foros/showthread.php?t=73902)

RedVenom 24-05-2011 01:09:01

saber el valor de un campo lookup de un dataset
 
Tengo un problemita, tengo un dataset en el que cree un campo LookUp y el cual agregue a un DBGrid ahora deseo saber cuando cambian el valor del campo lookup osea en un LookUpComboBox lo obtendria con LookUpComboBox.KeyValue en el caso del campo LookUp como puedo obtener el valor del LookUpKeyFields.
Espero Poder haberme expresado correctamente.
Gracias de antemano por su orientacion.

ecfisa 24-05-2011 03:25:23

Hola RedVenom.

No sé si estoy entendiendo bién lo que buscas obtener, por lo que te pongo un código de ejemplo donde se obtienen diferentes valores del campo Lookup que has creado en el DataSet.

Suponiendo que el campo se llame 'Lookup' sería:
Código Delphi [-]
begin
 if DataSet.FieldByName('Lookup').Lookup then
  with Memo1.Lines do
  begin
    Add('Nombre: '+DataSet.FieldByName('Lookup').Name);
    Add('Valor : '+DataSet.FieldByName('Lookup').AsString);
    Add('Tabla Lookup: '+DataSet.FieldByName('Lookup').LookupDataSet.Name);
    Add('Campo Lookup: '+DataSet.FieldByName('Lookup').LookupKeyFields);
    Add('Lookup result: '+DataSet.FieldByName('Lookup').LookupResultField);
    if DataSet.FieldByName('Lookup').LookupCache then
      Add('Lockup Cache: Activada')
    else
      Add('Lookup Cache: Desactivada');
  end;
end;

Saludos.

RedVenom 24-05-2011 03:55:00

No el campo no se llama LookUp desde el editor de campos del DataSet cree un campo tipo LookUp y quier extraer el valor en el DBGrid Como si se tratara de un DBLookUpComboBox.

ecfisa 24-05-2011 05:03:22

Hola.
Cita:

No el campo no se llama LookUp
Era de esperar... :)

Es por eso que dije:
Cita:

Suponiendo que el campo se llame 'Lookup'
La información obtenible de ese campo está en el mensaje anterior.

En cuanto a la aparición del valor en el DBGrid, cuando creas el campo lookup aparece automáticamente.
Pero no es así, si como comentas arriba, creaste los campos con el editor de columnas. En ese caso, desde el editor de columnas, sólo tenés que poner 'NombreDelCampoLookup' a la propiedad FieldName de la colúmna que agregaste para ese campo. (También podés elegirlo haciendo click como si fuese un ComboBox)

O por código, por ejemplo:
Código Delphi [-]
// Suponiendo que el campo Lookup corresponda a la última columna creada:
  DBGrid1.Columns[DBGrid1.Columns.Count-1].FieldName:= 'NombreDelCampoLookup';

Saludos.

RedVenom 24-05-2011 07:02:49

Disculpen, creo que no me estoy dando a entender, ahi va de nuevo tengo un dataset1 y en ese dataset1 cree un campo calculado de tipo LookUp que alimenta sus propiedades LookUpKeyFields y LookUpResultField desde el dataset2 y luego el campo calculado que cree lo muestro a traves de un DBGrid y efectivamente el campo em lo muestra como un ComboBox hasta ahi todo bien el problema que tengo es que cuando en el DBGrid desplieguen el ComboBox y pongan o cambien el valor yo quiero obtener el valor real que se va a guardar en el campo no el que se muestra ya que ese es para que el usuario sepa lo que esta agregand a la base de datos, entonces en el caso de un DBLookUpComboBox lo obtengo con KeyValue pero en este caso con el campo calculado que esta en el DBGrid no se como obtenerlo.
Espero haberme explicado mejor.

ecfisa 24-05-2011 11:03:10

Hola RedVenom.

Lo que buscas obtener... ¿ Es el valor por el cuál están relacionadas las propiedades KeyFields y LookupKeyFields ?

Si es así sencillamente sería:
Código Delphi [-]
  DataSet1.FieldByName('Cpo_Referencia').Value;
O desde el DBGrid:
Código Delphi [-]
  DBGrid1.DataSource.DataSet1.FieldByName('Cpo_Referencia').Value;
Para el ejemplo le puse el nombre: 'Cpo_Referencia', al campo declarado como KeyFields.

Si no es eso, me doy :(.

Saludos.

RedVenom 24-05-2011 22:09:52

De hecho asi es de ese modo puedo obtener el dato pero seria hasta de despues de hacer el Post antes el cambio que yo realize no se ve reflejado en la base de datos solo lo muestra el dbgrid solo lo vere hasta que afecte la base de datos y no deseo afectar la base de datos hasta antes de saber el valor. por eso hacia mencion al DBLookUpComboBox porque con ese se el valor sin afectar mi base de datos, pero no lo utilizo porque no aplica ya que son varios registros por eso pongo DBGrid.

ecfisa 26-05-2011 10:38:49

Hola RedVenom.
Cita:

el campo em lo muestra como un ComboBox hasta ahi todo bien el problema que tengo es que cuando en el DBGrid desplieguen el ComboBox y pongan o cambien el valor yo quiero obtener el valor real que se va a guardar en el campo...
Tengo una duda... no me queda en claro si usas la propiedad PickList de Columns o lo haces mediante un ComboBox que incorporas al DBGrid.

Saludos.

RedVenom 26-05-2011 14:46:13

Lo hago a traves de un campo calculado del dataset, solo creo el campo en el dataset y solo aparece en el DBGrid, no utilizo la propiedad PickList del DBGrid.

ecfisa 26-05-2011 15:49:05

Hola.

Abrí el Field Editor y poné este código de ejemplo en el evento OnChange del campo Lookup que creaste:
Código Delphi [-]
procedure TForm1.DataSet2CampoLookupChange(Sender: TField);
begin
  DataSet1.Locate('CampoRefDataSet1',DBGrid2.SelectedField.AsString,[]);
  (* Aca realizas las acciones que te interesen.
     En el ejemplo muestra el campo y aborta la operación *)
  ShowMessage(DataSet1CampoRefDataSet1.AsString);
  Abort;
end;
Podés usar el ejemplo tranquilo ya que aborta toda operación.

'DataSet2CampoLookup' es el nombre del campo calculado, 'DBGrid2' está referenciando a 'DataSet2' y 'CampoRefDataSet1' es el campo que está declarado en la propiedad KeyFields del campo calculado del 'DataSet2' y corresponde al 'DataSet1'.

Toda esta parafernalia sobre los nombres es necesaria por que desconozco cuales usaste. ;)


Saludos.

RedVenom 17-09-2011 23:38:18

No pude ejecutar tu codigo como que le hace falta algo en el showmessage


La franja horaria es GMT +2. Ahora son las 19:42: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