Ver Mensaje Individual
  #1  
Antiguo 03-08-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Reputación: 20
JuanBCT Va por buen camino
Dá error "Master has detail records" cuando no debería darlo!

Hola! Después de agotar todas las posibilidades (creo) les vengo a pedir ayuda sobre un tema puntual. Estoy haciendo un programa que "depura" registros que tienen varias tablas dependientes, y una de estas tiene a su vez otras cuatro tablas dependientes.

La estructura de las tablas es así:
- ORDENES.DB (maestro)

de esta dependen
- VALE.DB
- ITEMREP.DB
- ITEMTER.DB
- ITEMTEX.DB
- ITEMOBS.DB
- ITEMMOB.DB
- ITEMCOMB.DB
- NDBNCR.DB

y de esta última dependen
- NITEMMOB.DB
- NITEMREP.DB
- NITEMTER.DB
- NITEMTEX.DB

Primero, de un determinado rango de fechas paso los registros a otro juego de tablas iguales, cuyo nombre tiene una D adelante (ej: DORDENES.DB, DITEMREP.DB, etc.) Esto funciona bien.
Lo que entonces tengo que hacer a continuación es borrar estos registros que acabo de pasar, por lo que borro primero en los NITEM, luego en los que dependen de ORDENES y luego el registro en ORDENES.
Lo corro pero de vez en cuando me tira algún error "Master has detail records", más precisamente cuando intento borrar el NDBNCR (se borran CIENTOS de registros antes de q dé esto, por eso no sé cual es el error, mirándo el registro no descubro nada diferente).
La subrutina de borrado que uso es la siguiente:

Código Delphi [-]
      Base_serv.ordenes.first;
      DatamoduleD.Dordenes.first;
      while not DatamoduleD.Dordenes.EOF do
      begin
       Base_serv.Ordenes.SetKey;
       Base_serv.Ordenes['Nro_Orden']:=DatamoduleD.Dordenes['Nro_Orden'];
       If Base_serv.Ordenes.GotoKey then
         begin
         //Borro Orden
                 //Borra Item NItemRep
                 Base_serv1.NitemRep.first;
                 while not Base_serv1.NitemRep.eof do Base_serv1.NitemRep.Delete;
                 //Borra Item NItemMob
                 Base_serv1.NitemMob.first;
                 while not Base_serv1.NitemMob.eof do Base_serv1.NitemMob.Delete;
                 //Borra Item NItemTer
                 Base_serv1.NitemTer.first;
                 while not Base_serv1.NitemTer.eof do Base_serv1.NitemTer.Delete;
                 //Borra Item NItemTex
                 Base_serv1.NitemTex.first;
                 while not Base_serv1.NitemTex.eof do Base_serv1.NitemTex.Delete;
                 //Borra Item Ndbncr
                 Base_serv1.Ndbncr.first;
                 while not Base_serv1.Ndbncr.eof do Base_serv1.Ndbncr.Delete;
                 //Borra Item Comb
                 Base_serv.ItemComb.first;
                 while not Base_serv.ItemComb.eof do Base_serv.ItemComb.Delete;
                 //Borra Item mano de obra
                 Base_serv.ItemMob.first;
                 while not Base_serv.ItemMob.eof do Base_serv.ItemMob.Delete;
                 //Borra Item observaciones
                 Base_serv.Itemobs.first;
                 while not Base_serv.Itemobs.eof do Base_serv.Itemobs.Delete;
                 //Borra Item tex
                 Base_serv.Itemtex.first;
                 while not Base_serv.Itemtex.eof do Base_serv.Itemtex.Delete;
                 //Borra Item ter
                 Base_serv.Itemter.first;
                 while not Base_serv.Itemter.eof do Base_serv.Itemter.Delete;
                 //Borra Item rep
                 Base_serv.Itemrep.first;
                 while not Base_serv.Itemrep.eof do Base_serv.Itemrep.Delete;
                 //Borra Item Vale
                 Base_serv1.Vale.first;
                 while not Base_serv1.Vale.eof do Base_serv1.Vale.Delete;
                 //Borra Orden
                 Base_serv.ordenes.Delete;
         end;
      DatamoduleD.Dordenes.Next;
      coolgauge4.Progress:=(DatamoduleD.Dordenes.RecNo*100) div DatamoduleD.Dordenes.RecordCount;
      end;


Todas las tablas dependientes tienen el campo ['Nro_Orden'] que es el que las relaciona, a mi me parece que el proceso de borrado está bien (aunque evidentemente no lo está) ¿Se les ocurre algo? Cualquier ayuda u opinión que me puedan brindar será muy apreciada.
Gracias!

Juan

Pd: Disculpen la longitud del mensaje! Traté de explicarme bien.
Responder Con Cita