Ir al contenido


Foto

manipular sistema desde la base de datos


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

#1 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 16 mayo 2013 - 10:56

Amigos que tal, una pregunta, se puede hacer lo siguiente?

Tengo un sistema realizado en delphi y se conecta a firebird, desde la base de datos puedo mandarle instrucciones al sistema, es decir, no quiero modificar el sistema en su programación, esto por el usuario, en fin...

Me pide que si en el sistema se captura un dato en la base de datos se realice un proceso de validación (si el valor del campox de x tabla es mayor a 1000 mande un mensaje la base diciendo "es mayor" y por ende no me deje capturar).

Repito esto sin programar en el sistema es mas sólo desde el exe y todo que se haga en la base de datos, esto es posible?

Espero haberme explicado, saludos.
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 16 mayo 2013 - 11:17

A simple vista con un Trigger y una Excepción bastaría:


CREATE EXCEPTION VALOR_INVALIDO 'El valor no puede ser mayor que 10000';

CREATE OR ALTER TRIGGER TU_TABLA_BIU FOR TU_TABLA
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN
  IF (NEW.VALOR > 10000) THEN
  EXCEPTION VALOR_INVALIDO;
END
^

  • 0

#3 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 16 mayo 2013 - 11:20

A simple vista con un Trigger y una Excepción bastaría:


CREATE EXCEPTION VALOR_INVALIDO 'El valor no puede ser mayor que 10000';

CREATE OR ALTER TRIGGER TU_TABLA_BIU FOR TU_TABLA
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN
  IF (NEW.VALOR > 10000) THEN
  EXCEPTION VALOR_INVALIDO;
END
^


OK amigo, algo así me imaginaba, el caso que firebird es muy especial, en fin, deja reviso, gracias por tu respuesta, saludos.
(y)

  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 20 mayo 2013 - 11:51

De poder de se puede, con ciertas limitaciones y hasta cierto punto.
Partamos del hecho de que sea el motor (que está en servidor) quien "controle" a la aplicación (que estarán en los equipos clientes) no es un camino adecuado.
Es de hecho, contrario a la lógica y al diseño de la arquitectura cliente/servidor.

Necesariamente la aplicación de alguna forma debe estar preparada para responder a la lógica y los mensajes que se puedan enviar desde el motor de base de datos. Pero esperar que mágicamente podamos manipular el sistema cliente desde el motor sin que éste se tuviera que tocarle una coma es imposible.
El paradigma dicta lo contrario: son las aplicaciones clientes las que se solicitan órdenes al motor y luego éste les da una respuesta. Las aplicaciones pueden contar parcialmente con la lógica de negocio y hacer ciertos controles, y delegarle (bien merecidamente) al motor el resto de tales evaluaciones. Pero de allí a que sea el motor el que asuma todo el control no es un diseño muy sano.

Dependiendo de las necesidades y el diseño propuesto basado en el análisis habrá cosas que se pueden hacer (mejor) del lado del servidor, y otras que del lado cliente y por tu aplicación.

El consejo de emplear excepciones que ofrece Firebird es una muy buena opción, y hasta quizá sea LA solución. Ahora bien, necesariamente tu aplicación deberá ser capaz de capturar la excepción enviada y controlar el problema detectado. Esto por cada posible excepción que consideres oportuno elevar desde la base de datos.

Saludos,
  • 0




IP.Board spam blocked by CleanTalk.