PDA

Ver la Versión Completa : Función de Postgres que devuelve conjunto de registros


rmoraglez
17-10-2011, 21:51:34
Hola a todos:

Estoy intentando recuperar un conjunto de registros que se obtienen a través del llamado de una función de postgres. Trabajo en Delphi 7 y el acceso a Posgres lo tengo con ADO.

A traves de los componentes TADOStoreProcedure en tiempo de diseño le doy valor a los parametros de la funcion, y al poner Active en true, no me da problema, pero el DBGrid que tengo en mi formulario asociado al DataSource que a su vez esta relacionado con el TADOStoreProcedure sólo me muestra un registro con un campo que tiene como valor <unnamed portal 1>.

Alguien podria darme una idea de cómo puedo obtener los registros para mostrarlos en el DBGrid?

Muchas gracias. Espero que alguien me pueda dar una idea.

Saludos,
Reina

oscarac
17-10-2011, 22:08:18
puedes colocar algo de codigo?

rmoraglez
17-10-2011, 22:20:48
Hola:

La funcion de Postgres:

CREATE OR REPLACE FUNCTION "public"."card_for_emission" (pbin varchar, ptype integer, puser_id varchar, out result_table "pg_catalog"."refcursor") RETURNS "pg_catalog"."refcursor" AS
$body$
declare
bankpid integer;
seq_pid integer;
begin
select bank_pid into bankpid
from bin_def
where bin_def.bin_id = pbin;
if bankpid is null then
raise exception 'Invalid Bin for get card to emission';
end if;

if ptype = 1 then
-- People Card TABLE
open result_table for
select
distinct c.cardnumber, p.name, p.last_name, p.last_name2,
c.exp_date, c.card_type
from card c
inner join cardholder ch on
c.cardholder_pid = ch.cardholder_pid
inner join client cl on
cl.client_pid = ch.client_pid
inner join bank b on
b.bank_pid = cl.bank_pid
inner join people p on
p.people_pid = cl.people_pid
inner join bin_def bd on
bd.bank_pid = b.bank_pid
where
c.status = 1 and b.bank_pid = bankpid and c.printlot = 0;
insert into record_log (log_timestamp, log_table, log_table_pid,
log_user, log_action, details, log_errorcode)
values(CURRENT_TIMESTAMP(2), 'card', NULL, puser_id, 4 ,
'select card for PRINT FRONT: status=1' ||
' bank_pid='|| bankpid ||
' printlot= 0', null);
end if;
end;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER;


En Delphi tengo el siguiente codigo en el Create del formulario principal:

with DM do
begin
dsPrintFront.Dataset := spPrintFront;

MEmisor_Connection.Open;
spPrintFront.Parameters.ParamByName('pbin').Value := '977000';
spPrintFront.Parameters.ParamByName('ptype').Value := 1;
spPrintFront.Parameters.ParamByName('puser_id').Value := 'reina';
spPrintFront.Prepared := True;
spPrintFront.Open;
end;

En dicho formulario tengo un DBGrid y en tiempo de diseño puse DataSource = DM.dsPrintFront

Saludos,
Reina