Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-12-2010
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Poder: 14
martinartaza Va por buen camino
Capturar Raise Notice y enviarlo al formulario activo

Hola que tal, estoy usando los componentes PostgresDac 2.5.5 y quiero capturar los (eventos o mensajes) del postgres el 'Raise Notice' y enviarlo al formulario activo de la aplicación, una vez echo eso, que en cada formulario activo se programe lo que se quiera.

Resumen de lo que tengo:
1 - Modulo de datos con un PSQLDatabase, llamado DB.
2 - Un formulario llamado form1, que tiene un query1, tedit1, tbutton1.
3 - Un formulario llamado form2, que tiene otras cosas.

En la base de datos tengo la siguiente funcion
Código SQL [-]
CREATE OR REPLACE FUNCTION probando(idprueba integer)
  RETURNS integer AS
$BODY$
DECLARE
BEGIN
  raise notice 'Prueba nº %', idprueba;
  RETURN idprueba;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION probando(integer) OWNER TO postgres;

En el formulario 1 tengo.
El query1 tiene la siguiente instrucción.

select probando(:idprueba)

El codigo del button1 es:
Código Delphi [-]
PSProbando.Close;
PSProbando.ParamByName('idprueba').AsString:= EProbando.Text;
PSProbando.Open;
--------------------------------

Ahora lo que quiero es programar el evento, onnotice del componente DB del modulo de datos para que, envié un mensaje al formulario activo y este lo capte y se produzca un evento que se pueda programar en el formulario.

Bueno espero que halla sido claro, estuve tratando de usar el componente application events, pero no se como enviarle un mensaje o string al formulario activo y que este al recibir el mensaje produzca el evento, además no quiero programar al formulario en modo de escucha, quiero que sea por evento.

Desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 24-12-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Si te estoy entendiendo bien, pues creo que lo que necesita es crearte tu propio mensaje de ventana y enviarlo con la Api SendMessage a la ventana activa;
Para Obtener la ventana activa puedes usar la API GetActiveWindow que te devuelve el handle de la ventana activa.
Pero para que cualquier Formulario pueda capturar tu "mensaje de ventana personalizado" debes crearte en cada uno, el procedure correspondiente de capturamiento.
Resumiendo y ejemplificando todo lo anterior tenemos :

Primero debemos declararnos un mensaje de ventana propio, eso lo podemos hacer en cualquier unidad, solo hay que tener en cuenta que dicha unidad va ser usada por todos los formularios de la aplicacion.
Código Delphi [-]
Const
 WM_MyMENSAJE=WM_USER+30; // mi mensaje tiene como Identificador WM_MyMENSAJE
// se puede poner cualquier nombre de identificador
Segundo en el evento Onnotice del componente DB del modulo de datos, debes enviar el mensaje de ventana que hemos creado, a la ventana activa de la aplicacion más o menos así:
Código Delphi [-]
...
 var h:THandle;
begin
  h:=GetActiveWindow;// obtengo el handle de la aventana Activa
 SendMessage(h,WM_MyMENSAJE,0,0);// mando mi mensaje a la ventana Activa
...
end;
Finalmente para que en cualquier ventana nos demos cuenta que ha llegado el mensaje WM_MyMENSAJE pues debemos crearnos el procedimiento(Procedure) que capture el momento de recibir nuestro mensaje de ventana( en nuestro caso es WM_MyMENSAJE), entonces nos nos queda de otra que crearnos dicho procedimiento en todos y cada uno los formularios de la siguiente manera:
Código Delphi [-]
....
 private
    { Private declarations }
 Procedure Capturar_Mensaje(Var msg:TMessage); message WM_MyMENSAJE;// voy a capturar el mensaje WM_MyMENSAJE 
  public
    { Public declarations }
  end;
Y la implementacion asi:
Código Delphi [-]
procedure TForm1.Capturar_Mensaje(var msg: TMessage);
begin
ShowMessage('Ha llegado un mensaje');
{Código para hacer algo cuando recibamos el mensaje}
...
...
end;
Quizás algunos dirán: "Pero es muy laborioso crear éste procedimiento cuando son muchos formulario", pues en ese caso se podría crear un formulario Padre que implemente dicho procedure y todos los otros heredar de él. Eso debería funcionar ya que los formulario hijos ya heredan la implementacion del capturamiento de nuestro mensaje.
Espero haberte podido ayudar.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 27-12-2010
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Poder: 14
martinartaza Va por buen camino
Muchisimas gracias.

Hola, recién leo el mensaje, creo que me entendiste a la perfección, es más estoy por implementar herencia visual, y la idea es usar un formulario padre como dices, en general el mensaje del raise notice, es para escribir es un archivo que sirva de auditoria, en caso de que alguna ventana no funcione, sirve mucho en la etapa de desarrollo de nuevas funcionalidades que pide el cliente. Y como va haber distintos tipos de formularios padres por ahí se va a necesitar polimorfismo por eso necesito que el mensaje llegue al formulario activo en caso que se quiera hacer otra cosa con el raise notice.

Desde ya muchas gracias voy a ver si hoy en el horario de trabajo me queda tiempo libre para implementar lo que me dijiste.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda para capturar 'Raise Notice' de postgres en delphi 6 o 7. martinartaza Conexión con bases de datos 2 31-08-2011 01:55:37
Formulario activo siempre, y formulacio inicio que desaparezca tras 5 o 6 segundos Petolansa Varios 3 14-12-2007 02:50:25
Conocer Formulario Activo wolfang Varios 1 06-03-2007 07:02:59
Pregunta Interesante: Formulario siempre activo sonjeux Varios 5 10-02-2007 05:17:44
Formulario Activo? buitrago Varios 1 19-09-2003 02:03:16


La franja horaria es GMT +2. Ahora son las 10:10:33.


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
Copyright 1996-2007 Club Delphi