Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Crear un EXCEPTION para un VarChar (https://www.clubdelphi.com/foros/showthread.php?t=81721)

Edchar 11-12-2012 22:03:37

Crear un EXCEPTION para un VarChar
 
Hola soy nuevo en bases de datos antes usaba Acces como veran es muy diferente a FireBird.

El asunto es que quiero crear un EXCEPTION para un VarChar que si ha excedido el limite de caracteres mande el mensaje ""

lo que tengo es:
"CREATE EXCEPTION FstName_Menor_50 'Nombre de Cliente muy Largo reduzca el tamaño por favor a 50 letras.'"

pero no se como crear el TRIGGER para ese EXCEPTIO.

Me pueden ayudar por favor.

Muchas Gracias por la ayuda

ecfisa 12-12-2012 04:45:35

Hola Edchar, bienvenido a Club Delphi :)

Script ejemplo:
Código SQL [-]
SET TERM ^;

CREATE EXCEPTION EX_NOM_MAX 'Longitud máxima del nombre: 50 caracteres.' ^

CREATE OR ALTER TRIGGER CLIENTE_BIU FOR CLIENTES
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN
  IF (CHAR_LENGTH(NEW.NOMBRE) > 50) THEN
    EXCEPTION EX_NOM_MAX;
END ^

SET TERM ;^
Una imágen resultante de esta excepción desde Delphi:



Como dato adicional, el nombre de la excepción puede tener hasta 31 caracteres y el mensaje hasta 78.

Saludos.

Edchar 12-12-2012 06:27:27

Muchas gracias ecfisa por la bienvenida espero aprender con la ayuda de todos ustedes, tu ayuda me fue de mucha utilidad.

Ahora tengo otro problema y es que estoy trabajando con .Net y C# y aunque todo corre bien no me presenta ese cuadro de mensaje que es el que quiero que presente al usuario.

¿Como hago eso?

¿Acaso el TRIGGER debe de devolverme algo para crear un cuadro de mensaje desde .Net o FireBird tiene alguna forma de crear dicho cuadro de mensaje?

Muchas Gracias de nuevo, los novatos apreciamos todas esas ayudas.

Saludos

ecfisa 12-12-2012 07:49:24

Hola de nuevo.

Lamento no conocer .NET o C# como para asegurar como funcione en esos lenguajes. Pero tanto en Object Pascal como en C++ no es necesario crear el cuadro de mensaje, este se muestra tál como cuando se dispara cualquier otra excepción.

Es probable que en los lenguajes C# y .NET se comporte del mismo modo... De todos modos, creo que lo mas acertado es que pongas esta consulta en el foro [.NET] donde algún experto en ellos te podrá asesorar mejor.

Saludos.:)

Edchar 12-12-2012 18:40:12

Muchas gracias por tu ayuda pero creo que ya voy entendiendo un poco las bases de datos como firebird y según me párese esta puede contener las consultas y demás mediante SQL algo que no se podía hacer con Acces pues todo lo relacionado con SQL tenia que hacerse en el programa que uno iba creando, en otras palabras la base de datos interactua con el programa y no con el usuario, yo estoy usando Firebird lo que denominan Embebido o Monosaurio.

Ahora bien me podrías explicar un poco el funcionamiento de los TRIGGER.
Me parece que son como manejadores de eventos si es así que eventos puede manejar.

Gracias Saludos

ecfisa 12-12-2012 19:05:24

Cita:

Empezado por Edchar (Mensaje 451716)
Ahora bien me podrías explicar un poco el funcionamiento de los TRIGGER.

Hola Edchar.

En los siguientes enlaces vas a encontrar una explicación mejor y más organizada que la que yo podría brindarte:Buscando en la web podrás profundizar más sobre el tema.

Saludos. :)

Edchar 12-12-2012 20:20:27

Muchas Gracias por los Link me ayudaron mucho, seguro en mas de una ocasión estaré buscando ayuda de ustedes.

Edchar 16-12-2012 04:09:30

Un ultimo asunto sobre este tema y es que buscando encontré algo que me parece util y es hacer que el mensaje de error sea modificado en el momento en que este se efectúa como por ejemplo en el siguiente ejemplo que indica de cuantos caracteres es el nombre.

newDB.CreateTable("CREATE EXCEPTION FstName_Menor_50 'Error: '");
newDB.CreateTable("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");

A mi me funciono bien ¿Es esto correcto o existe una mejor forma de hacerlo?

Con relación al signo de + como estoy trabajando en .Net es para unir texto asi que no le presten atención.

Muchas Gracias

Casimiro Noteví 16-12-2012 11:20:13

Por favor, sigue las normas del club, y haz caso de ecfisa.
Preguntas distintas en hilos distintos, elige bien el foro adecuado, pon un título descriptivo, etc.
Lo dicho, nuestras normas, lo que llamamos guía de estilo.

Edchar 16-12-2012 20:28:51

Gracias Casimiro por tu recomendaciones me resultaron útiles los Link y voy a darles atención y creo que lo primero que are es no hacer referencia a .Net pero debido a trabajar con FireBird tengo que buscar un foro apropiado para aprender sobre el lenguaje interno de SQL que usa y creo que este es el foro que mas información me puede brindar.

Me disculpo si he puesto algo que no fue apropiado, de hecho noto que al poner los ejemplos se formatean de una forma especial lo tendré en cuenta a futuro pues las dudas están relacionada con esa parte.

Muchas Gracias por tus comentarios y la ayuda que me brindas, Saludos

Casimiro Noteví 16-12-2012 21:30:02

Para formatear el código sólo has de seguir este ejemplo:




Espero que podamos ayudarte en tus dudas :)

Edchar 17-12-2012 02:40:40

Muchas Gracias, Lo tendré en cuenta


La franja horaria es GMT +2. Ahora son las 02:54:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi