Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-09-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Abortar una Inserción

Hola amigos del foro, me gustaría saber cómo hago para evitar la inserción de un registro. He probado con esto, en un trigger "BI", pero no me resulta...

Código Delphi [-]
if (strlen(new.campo) = 0) then exit;

pensé que eso sería suficiente.

Tampoco deseo utilizar excepciones...

Gracias por vuestro tiempo
Responder Con Cita
  #2  
Antiguo 09-09-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Dónde estás colocando este código?

Si utilizas Table o Query, creo que debería funcionar el OnBeforePost, para poder cancelar utilizando un Cancel.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 09-09-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Hola Neftali, disculpa por lo poco de la explicación....

Lo que deseo hacer es directamente en la base de datos.

el código está en el trigger before insert de la tabla en cuestión pero el código no es suficiente pues me deja pasar el registro

Código SQL [-]
if (strlen(new.campo) = 0) then exit;

estoy pensando en eliminar el registro si en campo es vació o nulo en el "trigger after insert", pero me parece inapropiado; total si no hay de otra tocará

Gracias por tu tiempo
Responder Con Cita
  #4  
Antiguo 09-09-2010
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

Si quieres controlarlo en triggers

Lo normal para mi es utilizar una excepcion en el BI
sino quieres excepciones (no se porque no) puedes hacer una chapuza
en el AI delete tabla where id=new.id en el caso que no se cumpla la condicion


En fin esto es lo que hay

Panta
Responder Con Cita
  #5  
Antiguo 09-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Y por qué no pones en el BeforePost algo así como esto:

Código:
if (new.campo is not null) or (new.campo<>'') then
// hacer lo que sea
Supongo que ¿el campo es de texto?
Responder Con Cita
  #6  
Antiguo 13-09-2010
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Y por qué no pones en el BeforePost algo así como esto:

Código:
if (new.campo is not null) or (new.campo<>'') then
// hacer lo que sea
Supongo que ¿el campo es de texto?
¿Será por que lo quiere hacer a nivel Trigger y no a nivel aplicación?


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #7  
Antiguo 13-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues hazlo en el trigger beforeinsert.

¿Y por qué no te funciona?
Responder Con Cita
  #8  
Antiguo 13-09-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Cita:
Empezado por GustavoCruz Ver Mensaje
Hola amigos del foro, me gustaría saber cómo hago para evitar la inserción de un registro. He probado con esto, en un trigger "BI", pero no me resulta...

Código Delphi [-]if (strlen(new.campo) = 0) then exit;


pensé que eso sería suficiente.

Tampoco deseo utilizar excepciones...

Gracias por vuestro tiempo
Esta línea lo que te hace es salir del trigger, pero el registro como ya has comprobado se insertará igualmente. Hasta donde yo sé tienes que lanzar una excepción para decirle al motor que hay un problema y que no debe insertarse el registro.

Esa excepción después la puedes capturar en un try ... except de tu programa para que no sea visible por el usuario.

O bien, como dicen los compañeros, tendrás que hacer las verificaciones previas en el mismo programa Delphi y no en la base de datos.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #9  
Antiguo 13-09-2010
Gallosuarez Gallosuarez is offline
Miembro
 
Registrado: feb 2007
Posts: 92
Poder: 18
Gallosuarez Va por buen camino
Talking Otra manera...

Gustavo:

En alguna ocasión resolví el problema de las siguiente manera:

Creé un procedimiento almacenado
Código SQL [-]
CREATE PROCEDURE AGREGAR_ALUMNO (
    nombre varchar(35),
    a_paterno varchar(25),
    a_materno varchar(25))
as
BEGIN
    BEGIN
    IF (:nombre IS NOT NULL) THEN
      INSERT INTO alumnos (nombre, a_paterno, a_materno) 
      VALUES (:nombre, :a_paterno, :a_materno);
    SUSPEND;
END

De esta manera llamas a tu procedimiento almacenado con sus respectivos parámetros y no te va ha insertar ningún registro de acuerdo a la condición que tu elijas...

Saludos,
Gerardo Suárez Trejo

P.D. Ojo: es un procedimiento almacenado por separado ...

Última edición por Gallosuarez fecha: 13-09-2010 a las 21:31:13.
Responder Con Cita
  #10  
Antiguo 15-09-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Gracias a todos por sus comentarios y recomendaciones. probé la propuesta de mi amigo Gallosuarez; y todo va bien.

Un millón de gracias por vuestro tiempo


GustavoCruz
Responder Con Cita
  #11  
Antiguo 16-09-2010
chingolo chingolo is offline
Miembro
 
Registrado: feb 2008
Posts: 12
Poder: 0
chingolo Va por buen camino
la otra es hacer un rollback, pero personalmente es mejor verificar los datos antes de guardar debido a la integridad de la base, cuestion de gustos
Responder Con Cita
  #12  
Antiguo 07-10-2010
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Una vez salen las vistas actualizables a solucionar el problema.

Usa una vista actualizable y los triger de la vista puedes hacer lo que se te ocurra.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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
Abortar un proceso TONIAM Varios 10 31-05-2007 19:26:41
¿como abortar ejecución de eventos? pjjorda Varios 5 06-06-2006 20:59:59
Como Abortar mi APP sin q aparescan Mens de ERROR pcicom OOP 5 22-03-2005 09:22:13
Abortar un Ciclo While jmedina Varios 2 08-03-2005 20:48:17
abortar inmediatamente acrophet Varios 4 20-10-2003 18:07:18


La franja horaria es GMT +2. Ahora son las 01:30:35.


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