Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Duda para asignar un procedimiento a un evento (https://www.clubdelphi.com/foros/showthread.php?t=89277)

dtomeysoto 27-10-2015 19:59:54

Duda para asignar un procedimiento a un evento
 
Saludos colegas.

Estoy queriendo visualizar en un DBGrid una tabla que está en un servidor PostgreSQL. Esta tabla tiene solo dos campos, IP de tipo inet y MAC de tipo macaddr. Estoy usando componentes UniDAC para la conexión a la base de datos.

Cuando pongo un DataSource y lo vinculo con la TUniQuery con lo que quiero mostrar, en la DBGrid me pone en cada campo (MEMO).

Se me ocurrió crear dos campos calculados de tipo string y en el evento OnCalcFields darle valor a estos. Con lo anterior resolví el problema. Ya en el DBGrid me salen los valores IP y MAC como deberían ser.

Para lo anterior tomé prestada una Unit de otro programa que también utiliza esa base de datos y es la que tiene los componentes para la conexión al servidor PostgreSQL pero no quiero allí esos campos calculados.

Desde mi otro programa en tiempo de ejecución creo los dos campos calculados para no modificar esa Unit pero no se cómo declarar un procedimiendo que me va a calcular los campos y asignárselo al evento OnCalcFields de la TUniQuer.

Podían ayudarme? gracias.

Casimiro Notevi 27-10-2015 20:14:41

¿Pero qué quieres conseguir?

dtomeysoto 27-10-2015 20:39:18

Cita:

Empezado por Casimiro Notevi (Mensaje 498452)
¿Pero qué quieres conseguir?

Hola Casimiro, yo lo que quiero es crear los campos calculados en tiempo de ejecución, para esto he hecho lo siguiente:

Código Delphi [-]
procedure TFMainForm.FormCreate(Sender: TObject);
var
  sIP, sMAC: TStringField;
begin
  sIP  := TStringField.Create(dmPSQLCon.uqARP);
  sIP.FieldKind := fkCalculated;
  sIP.FieldName := 'sIP';
  sIP.Size := 15;
  sIP.Calculated := True;

  sMAC := TStringField.Create(dmPSQLCon.uqARP);
  sMAC.FieldKind := fkCalculated;
  sMAC.FieldName := 'sMAC';
  sMAC.Size := 17;
  sMAC.Calculated := True;

  dmPSQLCon.uqARP.Fields.Add(sIP);
  dmPSQLCon.uqARP.Fields.Add(sMAC);

ahora el problema que tengo es cómo hacer lo siguiente:

dmPSQLCon.uqARP.OnCalcFields := MiProcCalcFields(dmPSQLCon.uqARP);

dónde y cómo declaro el procedimiento MiProcCalcFields para poder asignárselo a dmPSQLCon.uqARP.OnCalcFields

Casimiro Notevi 27-10-2015 21:02:31

Pero no necesitas los campos calculados para presentarlos en el dbgrid, puedes mostrar los memos directamente.
Descarga y echa un vistazo a esto, entre los ejemplos de trucos para el dbgrid, está también el de mostrar el contenido de un memo.

Neftali [Germán.Estévez] 28-10-2015 10:17:11

Cita:

Empezado por dtomeysoto (Mensaje 498451)
Cuando pongo un DataSource y lo vinculo con la TUniQuery con lo que quiero mostrar, en la DBGrid me pone en cada campo (MEMO).

Esto es un poco raro.
¿Cómo están definidos los campos en la tabla de la Base de Datos?


La franja horaria es GMT +2. Ahora son las 15:24:56.

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