Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-10-2010
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
Error de Integridad Referencial

Buenas Noches amigos
Tengo un Formulario para el Mantenimiento de las Cuentas Contables en el cual tengo un Boton para Borrar y un componente TTable llamado TCuentas el cual contiene un campo que es clave foranea en la tabla Movimiento_Contabilidad mi problema es que Cuando intento borrar un registro de la tabla TCuentas y Tiene registros relacionados en la tabla Movimiento_Contabilidad me devuelve error que saca de la aplicacion.

Me gustaria saber como puedo presentarle un mensaje al usuario por Ejemplo 'No se puede Borrar la Cuenta porque ya Tiene Movimientos registrados' y que el usuario pueda pulsar aceptar el mensaje y seguir normal en la Aplicacion.

Muchas Gracias de Antemano por su Valioso Tiempo
Responder Con Cita
  #2  
Antiguo 05-10-2010
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
Error de Integridad Referencial

Buenas Noches amigos
Tengo un Formulario para el Mantenimiento de las Cuentas Contables en el cual tengo un Boton para Borrar y un componente TTable llamado TCuentas el cual contiene un campo que es clave foranea en la tabla Movimiento_Contabilidad mi problema es que Cuando intento borrar un registro de la tabla TCuentas y Tiene registros relacionados en la tabla Movimiento_Contabilidad me devuelve error que saca de la aplicacion.

Me gustaria saber como puedo presentarle un mensaje al usuario por Ejemplo 'No se puede Borrar la Cuenta porque ya Tiene Movimientos registrados' y que el usuario pueda pulsar aceptar el mensaje y seguir normal en la Aplicacion.

Nota: Utilizo una Base de datos en MS Sql Server Express 2008.
Muchas Gracias de Antemano por su Valioso Tiempo
Responder Con Cita
  #3  
Antiguo 05-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Lo que tienes que hacer es hacer un sql con los datos de la cuenta y el cliente a la tabla relacionada antes que tratar de borrar.
Si contiene datos simplemente muestra un mensaje.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 05-10-2010
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
Caral Tengo una duda con lo que me planteas, Como puedo especificarle a la Sql cual es la Cuenta que quiero borrar y al mismo tiempo validar si existe en la Tabla Movimiento_Contabilidad.


Los campos de mis tablas son los Siquientes:

TCuentas

Nombre de Campo Tipo de Datos
Id Autonumeracion
No Numero Clave Primaria
Descripcion Varchar2



TMovimieno_Contabilidad
Id Autonumerico
No Numero Clave Foranea que viene de la tabla Tcuentas
entre otros campo

Muchas Gracias por Tu Ayuda...
Responder Con Cita
  #5  
Antiguo 05-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Segun indicas la tabla TMovimieno_Contabilidad contiene datos relacionados con la tabla TCuentas.
Bien: Imaginemos que el dato relacionado es No Numero
Colocas un TQuery en el form y colocas algo asi:
Tienes un dato que esta en tu tabla adquirido por el TTable que colocaste.
Me imagino que esta activa.
Código SQL [-]
Select No from TMovimieno_Contabilidad where No = :TUDato
Donde TUDato es el dato sacado de la tabla.
Lo que harias es sencillamente sacar ese parametro de la sentencia y compararlo con el dato que genera, si coinciden entonces existe, si no, se podra borrar.
Esto por supuesto tendras que hacerlo con un TQuery y haciendo un begin, end, else ya que si no existe el else sera ejecutado.
Espero que me entiendas mejor.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 05-10-2010
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
Disculpa la Insistencia caral pero es que estoy comensando a programar y elegido delphi y soy muy novato en esto, ya tengo un componente TQuery en mi form y en la Propiedad Sql tengo lo siquiente: Select * from Movimiento_Contabilidad where No = :TuDato
Pero de ahí en adelante me perdi no se que mas hacer para hechar a andar este código.

Gracias por todo de corazón...
Responder Con Cita
  #7  
Antiguo 05-10-2010
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
En vez de intentar borrar, haz una búsqueda con un consulta SQL por ejemplo para ver si existen movimientos en caso de que te devuelva registros >0 entonces muestrás tu mismo el mensaje que desees.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #8  
Antiguo 05-10-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
hondaalberto, no repitas la misma pregunta en varios foros, gracias.
Responder Con Cita
  #9  
Antiguo 05-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
En cuanto tenga un rato te hago un ejemplo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 05-10-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Amigo existen varias formas de realizar consultas parametrizadas, aqui algunas:

Cuando en una consulta escribes un parametro debe ir precedido de dos puntos, como lo indico Caral.

Forma 1:
Código Delphi [-]
begin
       QMovimiento.Close;
       QMovimientos.SQL.Add('Select No from TMovimieno_Contabilidad where No = :TUDato'); 
       {:TUDato es un parametro, ahora debes tener cuidado si el parametro
es Numero o texto}
       //Para Numero     
       QMovimientos.ParamByName('TUDATO').AsInteger:=10;
       //Para Texto
      QMovimientos.ParamByName('TUDATO').AsString:=QuotedStr('Valor');
       QMovimientos.Open;

       {En este caso lo que se requiere es saber si hay registros que cumplan la condicion del filtro y para ello usas el contador de registros de la consulta
RecordCount te devuelve el numero de registros que tiene QMovimientos.}

       If (QMovimientos.RecordCount=0) Then
          ShowMessage('No Existen registros para la consulta')
       else 
          ShowMessage('Si hay registros para la cosulta');
       QMovimientos.Close;

Forma 2:
Código Delphi [-]
begin
       QMovimiento.Close;
       QMovimientos.SQL.Add('Select No from TMovimieno_Contabilidad where No = '+IntToStr(10));
       //Esto quedaria asi:
      //Select No from TMovimieno_Contabilidad where No = 10;

       QMovimientos.Open;

       If (QMovimientos.RecordCount=0) Then
          ShowMessage('No Existen registros para la consulta')
       else 
          ShowMessage('Si hay registros para la cosulta');
       QMovimientos.Close;

Bueno eso por ahora...Espero te aclare un poco la pelicula

Saludos
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
Integridad Referencial calogero MySQL 1 09-04-2009 04:28:50
Error de integridad referencial Palmiro Conexión con bases de datos 9 20-10-2008 13:34:10
Integridad referencial silviodp Tablas planas 0 22-08-2006 23:27:05
¿ Integridad referencial ? Turia MySQL 1 25-01-2006 13:59:33
Integridad referencial jdiazan Firebird e Interbase 3 07-07-2003 17:27:34


La franja horaria es GMT +2. Ahora son las 22:22:56.


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