Ir al contenido


Foto

Mensaje que confirme que se agrego, borro o modifico registro


  • Por favor identifícate para responder
6 respuestas en este tema

#1 edchar

edchar

    Member

  • Miembros
  • PipPip
  • 20 mensajes

Escrito 24 enero 2013 - 11:52

Estimados amigos en este momento ya he podido aprender a crear procedimientos pero necesito que cuando se agregue, modifique y borre un registro me devuelva un mensaje que lo confirme.

Tengo entendido que esto se hace mediante eventos pero estoy trabajando con FireBird Embebido por lo que eso no es posible en esta forma de usar FireBird.

Lo que si es posible usar son los EXCEPTION como este:

CREATE EXCEPTION FstName_Menor_50 'Error: el nombre debe tener menos de 50 caracteres '


Y en un TRIGGER se ejecuta de esta forma:

              CREATE TRIGGER catalog_FstName FOR CLIENT_TBL
                            ACTIVE BEFORE INSERT OR UPDATE POSITION 0
                            AS
                            BEGIN
                              IF (CHAR_LENGTH(NEW.name) >= 51) THEN
                                  EXCEPTION FstName_Menor_50 'El Nombre debe ser menor a 50 caracteres y posee ' ||              CAST(CHAR_LENGTH(NEW.name) AS VARCHAR(50));
                            END


Bien eso solo es un ejemplo de EXCEPTION  pero yo quiero que no me devuelva una excepción sino un Varchar que sea el mensaje que diga algo como 'Su registro fue agregado'

En fin espero haber podido explicarme.

Muchas Gracias por sus respuestas
  • 0

#2 edchar

edchar

    Member

  • Miembros
  • PipPip
  • 20 mensajes

Escrito 24 enero 2013 - 02:05

Sobre esto encontré el siguiente codigo y me gustaría que me dijeran si esto me funcionara o es mejor hacer algo diferente.

 
if (sqlcode = 0) then
    msgok = 'Agregado el dato';


Y lo estoy aplicando en el siguiente procedimiento de esta forma.

CREATE OR ALTER PROCEDURE PS_INSERT_PARENT_1 (
    id type of column parent.id,
    data type of column parent.data)
returns (
    msgok varchar(30))
as
begin
  insert into parent (id, data)
  values (:id, :data);
  insert into child (id, child_data, parent_id)
  values (:id+1, :data || 'VER RESULTADO', :id);

  if (sqlcode = 0) then  /*SQLERROR sqlcode = 0*/
    msgok = 'Agregado el dato';

  /* Procedure Text */
  suspend;


¿Seria correcta esta forma de hacerlo?
  • 0

#3 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 25 enero 2013 - 01:13

Buenas,

¿Seguro que los eventos no funcionan en Embedded? Lo digo porqué según leo aquí deberían de funcionar

No obstante, entiendo que ese procedimiento lo lanzas desde algún aplicativo. Dado que usas la versión Embedded de Firebird, entiendo que es una aplicación monopuesto, por lo que no encuentro mucho sentido el uso de eventos. El SP que usas para añadir registros tienes que lanzarlo desde tu aplicativo, por lo que bastaría con controlar el lanzamiento de una excepción en la llamada al procedimiento. Si da excepción, no hay inserción, sino la da, la hay.

Nos leemos
  • 0

#4 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 25 enero 2013 - 02:59

Pedir confirmación o avisar de que se hizo el cambio no es algo que tenga que hacer el motor de datos, es tu aplicación la que se debería encargar de eso, de todas formas, lo mismo te da poner:



delphi
  1. ShowMessage( InsertaFicha(datos) );



Que esto otro:



delphi
  1. try
  2.   InsertaFicha(datos);
  3.   ShowMessage('ok');
  4. except
  5.   ShowMessage('error');
  6. end;


Y en lo segundo no tocas la base de datos ni necesitas crear procedures para cada posible tipo de cambio en los datos con su returning.
  • 0

#5 edchar

edchar

    Member

  • Miembros
  • PipPip
  • 20 mensajes

Escrito 25 enero 2013 - 10:20

Gracias por sus respuestas pues estoy aprendiendo a lo que estoy acostumbrado es Acces.

¿Lo que les entiendo es que a nivel de la base de datos no se debe de hacer ese tipo de confirmación?

En eses caso ¿Por que si tengo entendido que Firebird tiene el manejo de eventos?

Revise el link que me dieron y ahi te dirige a otro Post en este link
http://stackoverflow...base-connection

que dice lo siguiente un comentario.
"Events are unfortunately not supported in embedded mode in Firebird -- they can only be run over the network ..."

Muchas Gracias por sus comentarios.
  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 26 enero 2013 - 02:02

Hola edchar,
Los eventos están pensados para notificar a los clientes de que se ha llevado a cabo una operación.
Pero esto no quiere decir que tal notificación implique que deba mostrar algún mensaje. Es simplemente un aviso, que se traduce internamente en un paquete tcp y enviado por red... algo al muy estilo: "Che... te comento que estuve haciendo x cosa. ¿Que más quieres ahora?".

En todo caso, y lo que en realidad debe hacerse, es desde el cliente capturar el evento disparado por el motor y actuar en consecuencia. Esto se puede hacer con TIBEvent de los componentes IBX. Lo que se haga a modo de respuesta depende de las necesidades... mostrar un mensaje, refrescar los grids, etc. La imaginación es tuya.  ;)

Lo que tu estás haciendo es trasladar una necesidad que tiene lugar en el contexto de una aplicación (capa lógica) hacia el contexto de la base de datos (capa datos). Lo cual no es lo más correcto, ya que estás forzando al motor a hacer algo para lo que no ha sido pensado.

Sobre la imposibilidad de utilizar eventos en la versión embebida no sabría decirte puesto que nunca he utilizado dicha versión.

Saludos,
  • 0

#7 edchar

edchar

    Member

  • Miembros
  • PipPip
  • 20 mensajes

Escrito 26 enero 2013 - 08:09

Muchas gracias Delphius por tu ayuda, ahora entiendo mejor el asunto.

Saludos
  • 0




IP.Board spam blocked by CleanTalk.