Delphi - Elimar registros de tabla relacionadas con delete

   
Vista:

Elimar registros de tabla relacionadas con delete

Publicado por lex (1 intervención) el 08/04/2010 22:29:56
veran, tengo una BD de Acces, en ella tengo tabla1 t tabla 2, en tabla1 tengo un campo llave(id), lo mismo que en tabla2(ID), estas estan enlazadas y funciona bien, enlazo a mi aplicacion con querys, realizo una consulta con query1 y la vacio en DBgrid1, hago una consulta con query2 y la vacio en DBgrid2, ahora la cuestion es que lo que hay en el primer dbgrid son clientes y lo que hay en el dbgrid2 son los pedidos de los clientes, esto funciona pero la cuestion es que deseo que el usuario pueda eliminar clientes, pero como estan relacionadas las tablas oviamente devo eliminar primeros sus pedidos o bien en coaciones el susuairo solo querra borrar solo los pedidos y no asi el cliente, pues vien despues de tanto choro este es mas o menos mi codigo
with datamodule3.Query3 do
begin
close;
sql.Clear;
if Application.MessageBox('Se eliminaran permanentemente el cliente y sus envios, ¿Desea continuar? ','El Paquete',MB_YESNO + MB_ICONQUESTION) = IDYES then
begin
try
begin
sql.Add('delete * from tabla2 where id = :numero2');
datamodule3.Query3.ParamByName('numero2').asstring:=datamodule3.Query2.Fields[0].AsString;
open;
with datamodule3.query1 do
begin
close;
sql.Clear;
sql.Add('delete from tabla1 where id =:numero1');
datamodule3.Query3.ParamByName('numero1').asstring:=datamodule3.Query1.Fields[0].AsString;
open;
end
end
except
begin
showmessage('Imposible eliminar el cliente o sus envios');
end;
end;
end;
end;

el error que me da es "error creating cursor handle" aunque si borra los registros pero no se reflejan los cambios en los DBgrid's

GRACIAS POR SU ASYUDA
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Elimar registros de tabla relacionadas con del

Publicado por martin (43 intervenciones) el 11/04/2010 16:36:50
mmm mira lo que podes hacer es especificar en access que cuando se borre un cliente se borren sus dependicas ,cuando especificas las relaciones entre entidades(tablas), hay que tildar donde dice eliminar en cascada o algo asi, y para mostrar los cambios con un simple TADOQuery.requery alcansa.
saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elimar registros de tabla relacionadas con del

Publicado por martin (43 intervenciones) el 11/04/2010 16:36:52
mmm mira lo que podes hacer es especificar en access que cuando se borre un cliente se borren sus dependicas ,cuando especificas las relaciones entre entidades(tablas), hay que tildar donde dice eliminar en cascada o algo asi, y para mostrar los cambios con un simple TADOQuery.requery alcansa.
saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elimar registros de tabla relacionadas con del

Publicado por lex (1 intervención) el 11/04/2010 21:47:54
Hola, mira el caso es que en ocaciones solo se tendran que borras los registros relacionados(solo envios) y no asi los registros de la tabla principal, es decir, tal vez quiera elimiar todos los envios de Pedro pero no asi Alvarez (tabla2) pero no asi al propio pedro(tabla1) o en ocaciones borrar a pedro alvarez y todos sus envios, ahora estoy estolizando Query no AdoQuery, no se si aplique para mi caso
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Elimar registros de tabla relacionadas con del

Publicado por martin (43 intervenciones) el 11/04/2010 23:39:56
ha ok,bueno creo q el problema que tenes tiene que ver con los filtros, estas filtrando siempre a query3,y cuando queres borrar los envios estas usando query1, con lo cual no estarias filtrando query1,y otra cosa que veo que tendrias que cambiar es que en ves de usar Open para realizar el query yo usaria ExecSQL, por que por lo general o nunca una operacion DELETE no devuelve un recordset.
Otra opcion es la siguiente:

para borrar los envios de un cliente x:

QueryEnvios.Close;
QueryEnvios.SQL.Clear;
QueryEnvios.SQL.Add('DELETE FROM Envios WHERE IdCliente='+VarToStr(QueryClientes['idCLiente']));
QueryEnvios.ExecSQL;

QueryEnvios.Close;
QueryEnvios.SQL.Clear;
QueryEnvios.SQL.Add('SELECT * FROM Envios');// Una Suerte de ReQuery
QueryEnvios.Open;//Ahora si devuelve un recorset, es para que lo levante el dbgrid

Si el problema sigue, puede ser tambien que el dbgrid te tire el error por que hacer un delete y no devolver ningun dato.

fijate si con esto se arregla.

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar