PDA

Ver la Versión Completa : Como borrar articulos con relacion a otra tabla


kaeltas
12-01-2010, 19:07:26
Primero que nada gracias por esta web y a toda la comunidad :D

Resulta que estoy teniendo problemas con una base de datos SQL que tiene unas tablas que estan relacionadas, (una de "Articulos" y otra de "Ordenes de compra") el problema es que quiero borrar un articulo de una de ellas pero que quede guardado en la tabla de ordenes de compra.

Intente borrarlo pero obtuve un error por la relacion que existe entre ellas, como puedo hacerle en estos casos???

Gracias por su atencion y perdonden las molestias! ;)

rgstuamigo
12-01-2010, 19:29:30
Creo que debes aprenderte el concepto de Integridad referencial (http://es.wikipedia.org/wiki/Integridad_referencial).;)
Saludos...:)

rgstuamigo
12-01-2010, 19:38:19
Claro que eso no significa que no puedas eliminar, por supuesto debes entender bien lo que estas haciendo, por que puede ocurrir que elimines o tengas perdidas de registros al ejecutar una elimnacion.;)
Por lo general en lo personal, yo aplico los siguientes criterios cuando voy a eliminar,insertar o Modificar tablas en la base de datos(especialmente si tengo tablas maestra-detalle)--> puedes ver el post # 12 (http://www.clubdelphi.com/foros/showpost.php?p=347900&postcount=12) de este hilo (http://www.clubdelphi.com/foros/showthread.php?t=65263).;).
Saludos...:)

kaeltas
12-01-2010, 20:02:59
Claro que eso no significa que no puedas eliminar, por supuesto debes entender bien lo que estas haciendo, por que puede ocurrir que elimines o tengas perdidas de registros al ejecutar una elimnacion.;)
Por lo general en lo personal, yo aplico los siguientes criterios cuando voy a eliminar,insertar o Modificar tablas en la base de datos(especialmente si tengo tablas maestra-detalle)--> puedes ver el post # 12 (http://www.clubdelphi.com/foros/showpost.php?p=347900&postcount=12) de este hilo (http://www.clubdelphi.com/foros/showthread.php?t=65263).;).
Saludos...:)

Te agradesco mucho tu respuesta, y ya lei lo que sugieres, el problema es que talvez necesito ser mas especifico.:(

Plz aqui te dejo una explicacion mas detallada haber si me pueden ayudar:

Tengo 2 tablas, la primera de Articulos y la segunda donde guardo "Ordenes de Compra" estas 2 tablas estan ligadas por "idArt".

Ahora va el asunto importante! yo quiero borrar algunos articulos que ya no se usan en la empresa, o simplemente algunos que estan duplicados en la tabla.

Pero a la hora de borrarlos me sale un error por que estan ligados con la tabla "ordenes de compra" (ya que alguna vez se compro ese articulo).

NOTA: Yo no quiero borrarlo de las ordenes de compra por que sirve para el registro de compras de la empresa, pero quiero borrarlo de la tabla de articulos por que ya no sirven.

Como le puedo hacer? Que se hace en esos casos? :confused:

Plz me ayudarian muchisimo con sus respuestas, Gracias!!!

rgstuamigo
12-01-2010, 21:04:30
...
NOTA: Yo no quiero borrarlo de las ordenes de compra por que sirve para el registro de compras de la empresa, pero quiero borrarlo de la tabla de articulos por que ya no sirven.

Como le puedo hacer? Que se hace en esos casos? :confused:

Plz me ayudarian muchisimo con sus respuestas, Gracias!!!
Pues precisamente por eso te sugeri que entendieras el concepto de integridad referencial.;)
Lamentablemente no podras eliminar ningun articulo, si dicho articulo esta siendo referenciado(Foreign key)por otra tabla, de eso se trata la integridad referencial.;)
Por lo lo general se debe considerar precisamente esto, al momento de diseñar la base de dato; para lo cual existe muchas estrategias para solucionar este problema; una de ellas es añadir a tu tabla articulo un campo que indique el estado del articulo por ejemplo tu campo nuevo podria ser de tipo Char o Varchar(1), que solo reciba un caracter el cual te indique el estado del articulo, por ejemplo:
Tabla articulo

Codigo| Nombre|Estado
01____Harina____A
02____Arroz_____A
03____Frejol_____D
04____Azucar____D
...

Donde
A significa Activo
D significa Desactivado (O podria ser E=Eliminado)
(Puedes colocar otras opciones)
De esa forma tranquilamente puedes activar o desactivar cualquier articulo.;).
Puede que el usuario crea que esta eliminando pero en realidad solo se esta cambiando su estado del articulo(es solo una eliminacion logica ;)), pero en realidad no se elimina de la base de dato.
Para saber los articulos activos tan solo podrias hacer esta simple consulta SQL
select * from Articulos Where Estado='A';
De esta forma mas o menos trabajan las bases de datos de la entidades financieras como ser Bancos, Coopertivas,Mutuales,etc, ya que en un verdadero sistema no se deberia eliminar nada, todo queda como Historial.(Mucho menos si se va hacer Auditorias);).
Espero haberte ayudado.;)
Saludos...:)

kaeltas
12-01-2010, 23:41:26
Me ayudaste muchisimo y me ha quedado claro, lo que hare sera agregar el campo "Activo" y que las opciones sean "si/no" entonces en mi programa hare una consulta donde me muestre solo aquellos que estan activos.

Lamentablemente yo no diseñe la base de datos del sistema ya que fue generado por otras personas, pero entonces me doy cuenta que fue un error de diseño crearla de esta manera. (imagina que tengo 4 articulos repetidos pero al hacer referencia a otra tabla no pueda eliminarlos).

Lo tendre en cuenta para futuros proyectos.

Mientras tanto te agradesco muchisimo tu atencion y tu pronta respuesta, Me ayudaste muchisimo GRACIAS! :D