Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear campo calculado en tiempo de ejecucion-Ibquery (https://www.clubdelphi.com/foros/showthread.php?t=61072)

andresenlared 24-10-2008 16:18:24

Crear campo calculado en tiempo de ejecucion-Ibquery
 
Saludos amigos...

El problema es el siguiente.

Tengo almacenado en un campo de base de datos un SQL que luedo es cargado a un Ibquery para ser usado como fuente de datos para un reporte.

Dependiendo de un parametro que uso en la tabla que almacena el SQL necesito crear dos campos calculados informacion que es traida desde otras bases de datos.

he esdo buscando pero no encuentro la forma de hacerlo.

Me pueden ayudar ???...muchas garcias.:D

jhonny 24-10-2008 17:18:02

Sinceramente en lo personal no entendi muy bien el asunto, ¿Podrias ponerlo mas claro?

andresenlared 24-10-2008 17:40:41

Gracias por contestar.

la idea es que al crear un sql en tiempo de ejecucion y se le asigna a un Ibquery. Los campos del sql pueden variar, pero necesito poner dos campos calculados sobre el Ibquery tambien en tiempo de ejecucion.

Gracias.

jhonny 24-10-2008 17:52:26

Para crear un campo calculado en ejecución en un DataSet, puedes hacer lo siguiente... donde DataSet1 es tu Dataset...

Código Delphi [-]
var
  Campo :TFloatField;
begin
  Campo                 := TFloatField.Create(DataSet1);
  Campo.FieldName       := 'MiCampoCalculado';
  Campo.FieldKind       := fkCalculated;
  Campo.DataSet         := DataSet1;
end;

andresenlared 24-10-2008 18:23:29

Gracias....

Tu solucion me funciono, y crea el campo calculado pero si tengo cargados todos los campos del query, como son querys que se crean en tiempo de ejecucion tendria que cargar los campos en tiempo de ejecucion...como puedo hacer esta parte ??

y de nuevo gracias por tu ayuda.

jhonny 24-10-2008 19:49:29

Pues al abrir la consulta tu TQuery cargara todos esos campos automaticamente... en el orden de ideas sera despues de esto cuando puedes crear el campo calculado.

anubis 18-06-2014 18:11:30

Perdonad que reabra esta consulta,

Exactamente donde se crea el campo calculado, en el evento oncalcfields del query?.

Antes lo hacia directamente en el query en tiempo de diseño, era mas facil desde el mismo query pero por codigo se me complica.

Perdon yo uso los componentes zeos pero imagino que es lo mismo.

Casimiro Notevi 18-06-2014 18:56:23

Lo crea donde quieras.
Se calcula en el oncalcfields

anubis 18-06-2014 22:24:24

gracias por contestar,

si aplico la creacion de un campocalculado como esta arriba, y llamo al procedimiento, antes claro de activar el dataset, el resto de campos del query me da error porque no los encuentra.

Quiere decir que tengo que cargar cada campo entonces?.

de todas formas haciendolo:
Código Delphi [-]
Campo                          := TstringtField.Create(zquery1);  
Campo.FieldName        := 'nombreproducto';  
Campo.FieldKind          := fkdata;   
Campo.DataSet           := zquery1;

me da error que el nombreproducto no existe en el query

anubis 18-06-2014 23:34:55

Perdon,

Efectivamente, si creo por codigo un calculado, tengo que cargar todos los campos del query primero.

Y, ya puestos.

Si tengo el codigo de un producto por ejemplo en un query y lo quiero mostrar en otro dbgrid pero por el nombre, tambien es un campo calculado no?.

Casimiro Notevi 18-06-2014 23:45:17

Un campo calculado es, por ejemplo, si tienes los campos "cantidad" y "precio" y quieres presentar el resultado de multiplicar ambos. Es un campo que no existe en la base de datos.

anubis 19-06-2014 00:37:47

sí perdón me lie solo. el enlace de un query con otro es meter un campo calculado para poder usarlo en dbgrid

anubis 19-06-2014 06:44:39

Como no puedo editar, me respondo, para enlazar dos querys he creado un campo fklookup

Código Delphi [-]
procedure tform1.crearenlaceenquery;
var
campo:tstringfield;
begin
 Campo                    := TstringField.Create(fmodulo.zqcompras);
   Campo.FieldName          := 'nombres';
   Campo.FieldKind          := fklookup;
   campo.KeyFields          :='id_producto';
   campo.LookupDataSet      :=fmodulo.zqproductos;
   campo.LookupKeyFields    :='id_producto';
   campo.LookupResultField  :='nombreproducto';
   Campo.DataSet            := fmodulo.zqcompras;
end;

nombres es el campo de busqueda,
id_producto en el keyfields es el campo con el que se relaciona compras con productos
id_producto en el lookupkeyfields es el campo primary key donde busca en productos
nombreproducto es el resultante.

para poder ver el nombre del producto en vez del id_producto en el dbgrid, asignamos el campo nombres.

No se si a alguien le ayude esto, pero lo comparto por si sirve.

Gracias a todos por vuestra ayuda.


La franja horaria es GMT +2. Ahora son las 08:14:42.

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