Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Error de Integridad Referencial (https://www.clubdelphi.com/foros/showthread.php?t=70182)

hondaalberto 05-10-2010 04:16:02

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

hondaalberto 05-10-2010 04:16:48

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

Caral 05-10-2010 04:27:12

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

hondaalberto 05-10-2010 04:43:09

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...

Caral 05-10-2010 05:00:34

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

hondaalberto 05-10-2010 06:18:52

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...

marcoszorrilla 05-10-2010 07:16:32

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.

Casimiro Noteví 05-10-2010 12:05:44

hondaalberto, no repitas la misma pregunta en varios foros, gracias.

Caral 05-10-2010 13:59:07

Hola
En cuanto tenga un rato te hago un ejemplo.
Saludos

cloayza 05-10-2010 15:50:05

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 :D:D

Saludos


La franja horaria es GMT +2. Ahora son las 11:17:45.

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