PDA

Ver la Versión Completa : Como controlo el doble borrado ?


Jorge Taveras
13-10-2005, 04:26:19
Tengo el siguiente sql en un adodataset

select
M.Documento,
M.Orden,
M.ClaveProducto,
M.CostoUnitario,
M.Cantidad,
M.Precio,
M.DescuentoInd,
M.recargoInd,
M.Importe,
M.Nota01,
M.Nota02,
Eq.DescripcionEspanol,
Eq.DescripcionIngles,
Eq.Modelo
From Cot_CotizacionDet M
Join Equipos Eq on eq.clave = m.claveproducto
WHERE M.Documento = :Documento
ORDER BY M.ORDEN

con el agrego, modifico y consulto los registros correctamente.
Es bueno señalar que los campos descripcionEspanol y descripcion ingles son campos memos, traté de hacer un lockup pero no es posible con campos memos.
Pues, siguiendo con la idea, el punto es que ese adodataset es un adodatasetDetalle, de un formulario que le incluyo registros de cotizaciones.
puedo agregarle registro a la cotizacion pero si borro un registro de esta, me borra el registro asociado en un maestro de equipos que tengo donde tengo las descripciones en ingles y en español.
Ayuuda... me urge una respuesta rapida a este problema.

epuigdef
13-10-2005, 08:08:49
Buenas!


En lugar de borrar sobre este dataset puedes crear un query de borrado:

delete from cotizaciones_det where clave = ......

Y ejecutarlo aparte de la select que tienes

Un saludo

Edu

Neftali [Germán.Estévez]
13-10-2005, 09:16:21
...pero si borro un registro de esta, me borra el registro asociado en un maestro de equipos que tengo donde tengo las descripciones en ingles y en español.
¿No tendrás definido en la Base de Datos Borrados en cascada?
Es la única explicación que se me ocurre para que se borre un registro sólo (sin que tú hayas programado nada).

Jorge Taveras
13-10-2005, 12:52:27
Estimado Neftali, me gustaria saber a que te refieres con el borrado en cascada en la base de datos. Me refiero a si hablas de una propiedad de la base de datos que se puede manejar o algun triggers o procedimiento que produce este efecto.

Neftali [Germán.Estévez]
13-10-2005, 13:11:41
Justo a eso me refería. A que si tú no borras el registro, tal vez se esté borrando desde la Base de Datos como tú bien dices: Borrados en casacada o triggers.

__hector
13-10-2005, 15:16:07
El borrado en cascada no es un trigger en su esencia, aunque se comporte como tal. Al definir una relacion entre dos tablas, especificamente una llave foranea entre campos de dos tablas, puedes especificar que accion tomar en caso de que el campo de la tabla maestro (o el registro como tal) se modifique o elimine.

Entre esas acciones estan: actualizar el registro detalle, eliminar el registro detalle (en caso de tratarse de un delete del registro maestro) o cambiar el valor del campo en el detalle por un valor 'por defecto'. Algo asi como que si eliminas el registro maestro, el campo claveid de la tabla detalle que antes tenia el valor claveid de la tabla maestro tenga un valor de '0', o cualquier otro valor.

Jorge Taveras
13-10-2005, 15:28:17
Estimado Neftali, me gustaria saber a que te refieres con el borrado en cascada en la base de datos. Me refiero a si hablas de una propiedad de la base de datos que se puede manejar o algun triggers o procedimiento que produce este efecto.

Jorge Taveras
13-10-2005, 15:33:03
Estimado hector, me puedes decir como hacerlo desde un adodataset, puesto que no he podido localizar esas propiedades que hablas.

Neftali [Germán.Estévez]
13-10-2005, 15:54:51
..me gustaria saber a que te refieres con el borrado en cascada en la base de datos. Me refiero a si hablas de una propiedad de la base de datos que se puede manejar o algun triggers o procedimiento que produce este efecto.
Son propiedades que defines al crear la Base de Datos. No debes buscarlas en los componentes de Delphi; Debes hacerlo desde el Administrador de SQL Server. Como ya te han dicho se definen en las propiedades de las relaciones entre tablas (si es un borrado en cascada). Si es un trigger también debes buscarlo en el administrador de BD.

Jorge Taveras
14-10-2005, 02:00:16
Agradezco a todos su colaboracion, resolví el problema borrando desde otro query como varios habian sugerido, aunque , me gustaria conocer mas sobre el borrado en cascada...
Gracias... muchas gracias

epuigdef
14-10-2005, 08:10:36
Si has solucionado el problema con otro query como te sugerí, entonces el problema no estaba en el borrado en cascada, sino en que estabas borrando sobre un query en el que había una join.


Un saludo

Edu