Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ayuda para capturar 'Raise Notice' de postgres en delphi 6 o 7. (https://www.clubdelphi.com/foros/showthread.php?t=70756)

martinartaza 09-11-2010 14:01:12

Ayuda para capturar 'Raise Notice' de postgres en delphi 6 o 7.
 
Hola querido foro yo de nuevo por acá haciendo preguntas que no encuentro por la web.
Estoy programando usando Delphi 6, 7 (según la maquina que me siento, hay distintos proyecto con distintas librerias) y todos usando postgres SQL.
En postgres tengo funciones que usan el raise exception y a eso la capturo bien desde delphi, pero postgres también posee lo que se llama raise notice, y habia estado evitando usarlo debido a que no sabia como capturarlo, ahora en este momento me va a simplificar mucho la vida.
Lo que necesito es saber como capturo el raise notice de postgres.
Ejemplo

En sql tengo la siguiente función.
Código SQL [-]

CREATE OR REPLACE FUNCTION registrarpagofacil(p_fecha date, p_import numeric, p_idctacte integer, p_vencim1 date, p_import1 numeric, p_vencim2 date, p_import2 numeric, p_vencim3 date, p_import3 numeric)
  RETURNS void AS
$BODY$
DECLARE
  CtaCte_Cliente RECORD;
BEGIN
....
....
....
  SELECT * INTO CtaCte_Cliente 
  FROM CtaCte_Clientes ccc 
  LEFT JOIN ClientesCuentas cc USING(idCuenta) 
  WHERE idCtaCte = p_idCtaCte;
  IF CtaCte_Cliente IS NULL THEN
    RAISE EXCEPTION 'Clave primaria de cuenta corriente: % de cliente no encontrada', p_idCtaCte;
  END IF;
...
...
...
-- Si llego hasta el final, termino bien.
RAISE NOTICE 'La operación con la cuenta corriente: % a sido exitosa', p_idCtaCte
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION registrarpagofacil(p_fecha date, p_import numeric, p_idctacte integer, p_vencim1 date, p_import1 numeric, p_vencim2 date, p_import2 numeric, p_vencim3 date, p_import3 numeric) OWNER TO postgres;


El motivo por el cual quiero saber si termino bien, es que este proceso se tira, al leer un arhivo que tiene n lineas, y si una linea del archivo anda mal, se cancela la operación, con raise exception solo puedo saber que una linea termino mal, pero con el raise notice puedo leer cuantas lineas terminaron bien, y saber en que linea del archivo buscar el problema.

Ojo, no quiero atrapar el raise notice con una excepcion del programa, a la excepcion de postgres la atrapo con un bloque try except, pero al raise notice de postgres, simplemente lo quiero mostrar en un ListBox.

Bueno, en conclusion lo que quiero hacer es algo por el estilo.

Código Delphi [-]
listbox1.add(raise notice de postgres)

Desde ya muchas gracias y recuerde como siempre busque en otros lados (en español) y no encontré nada al respecto.

martinartaza 09-11-2010 19:10:14

[Solucionado] Se puede usar el componente db de postgresdac
 
Hola, en el mensaje anterior me olvide de decir, que uso postgresdac, bueno en los distintos componentes parece ser que hay muchas opciones, probe con PSQLNotify, con el PSQLMonitor y nada, finalmente encontre la solución con el propio PSQLDatabase, tiene un evento llamado OnNotice, y bueno haí que programarlo desde hay, el problema es que en un proyecto de más de 140 tablas, con 1 solo componente PSQLDatabase, programar el notice para que muestre datos desde cualquier stored procedure que es llamado de algún formulario es medio engorroso, pero ya vere que solución puedo darle.

burgosrodas 31-08-2011 01:55:37

Capturar RAISE NOTICE de Postgres
 
Hola
haz dado con la misma duda que he tenido
como capturar los diferentes RAISE que postgres maneja
pues yo diferencio los RAISE NOTICE, RAISE WARNING, RAISE INFO etc...
pero no logro verlos desde Delphi...
pero me haz dado una buena idea con los componentes, pues yo utilizo los ZEOS
y tambien veo un componente llamado ZPgEventAlerter, con el mismo evento que planteas OnNotify, pero no se como utilizarlo para lo que necesito, pues ahora quiero implementar el sistema de notificaciones asincrono
LISTEN, NOTIFY y no se como capturar el cuerpo del mensaje.

espero alguien encuentre una forma sencilla de hacerlo

saludos desde Colombia


La franja horaria es GMT +2. Ahora son las 20:56:53.

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