PDA

Ver la Versión Completa : ayuda para conectar delphi con postgres


pame
18-09-2013, 02:49:38
Buenas noches
necesito que me ayuden, ya consegui mostrar una funcion setoff record de postgres a delphi.
En postgres realice este procedimiento:

CREATE OR REPLACE FUNCTION eoq(fi date, ff date)
RETURNS SETOF record AS
$BODY$
declare
_resultado record;
begin
for _resultado in
SELECT
DISTINCT a.cod_producto,
p.nombre,
SUM(a.cantidad::float) / ($2::date - $1::date) AS demanda,
sqrt((2 * 75 * (SUM(a.cantidad::float) / COALESCE ($2::date - $1::date,1))) / (COALESCE(p.precio_unid * 0.17,1))) AS Q,
(SUM(a.cantidad::float) / ($2::date - $1::date)) /(sqrt((2 * 75 * (SUM(a.cantidad::float) / COALESCE ($2::date - $1::date,1))) / COALESCE(p.precio_unid * 0.17,1))) AS N,

(sqrt((2 * 75 * (SUM(a.cantidad::float) / COALESCE ($2::date - $1::date,1))) / COALESCE(p.precio_unid * 0.17,1)))/
(SUM(a.cantidad::float) / ($2::date - $1::date)) as T,
Stddev(a.cantidad) * sqrt(4) AS Desv,
(Stddev(a.cantidad) * sqrt(4)) * 1.28 AS ISS,
(SUM(a.cantidad) / COALESCE ($2::date - $1::date,0)) * 4 +(((Stddev(a.cantidad) * sqrt(4)) * 1.28 )) AS R

FROM detalle_venta a, producto p, factura_vent fv


WHERE ((p.cod_producto = a.cod_producto) AND (a.cod_fact_vent = fv.cod_fact_vent) AND
(fv.fecha BETWEEN $2::date AND $1::date))

GROUP BY a.cod_producto, p.nombre, p.precio_unid loop
return next _resultado;
end loop;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION eoq(date, date) OWNER TO postgres;


Y en delphi llame a este procedimiento mediante un query donde coloque lo siguiente:

select * from eoq(:fec_inicio,:fec_fin)as
(cod_producto character varying,nombre character varying,
demanda float ,Q float,N float,T float,Desv float,
ISS float,R float);


Pero cuando hago correr mi programa en delphi para mostrar el resultado en un dbgrid no muestra nada, cual puede ser mi error?
Ya probe el procedimiento de postgres y funciona perfectamente.


gracias.

gatosoft
19-09-2013, 01:42:24
Creo que el problema es que debes ser más específico en cuanto al registro de salida... no basta con setof record...

debes definir un tipo de salida y tu funccion debe retornar un setof "tu_tipo"

create type MyTipo as (Campo1 int, Campo2 int8);
....
create function Myfuncion() returns setof MyTipo as....

pame
19-09-2013, 05:47:24
Hola gracias por responder, pero creo que a lo que te refieres, es a este query en delphi cuyo codigo llama a la funcion en postgres y creo debería botar algún resultado en un dbgrid
select * from eoq(:fec_inicio,:fec_fin)as
(cod_producto character varying,nombre character varying,
demanda float ,Q float,N float,T float,Desv float,
ISS float,R float);

si fueras mas especifico con las funciones que coloque en este foro, es decir con mis propios ejemplos que coloque, agradecería toda la ayuda que me puedan brindar.

gracias