Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Al ver la extensión DB parecen archivos paradox, en este caso, cuando se borra con delete, no se adelanta el puntero al registro activo, sino que decrece, por tanto, no debes usar while not tabla.eof sino más bien
while not tabla.bof o incluso while tabla.RecordCount>0

Otra forma más rapida sería con una consulta de borrado:
Código Delphi [-]
const sqlBorrado = ' delete from %s where %s';
var Nombres :array[0..2] of string = ('NITEMTEX.DB','NITEMTER.DB','NITEMREP.DB');

var q:Tquery;
    i:integer;
begin
 q := Tquery.Create;
 try
 for i:= low(nombres) to high(nombres) do
 begin
  if q.Active then q.Close;
  q.sql.Text := format(sqlBorrado,[Nombres[i], 'Nro_Orden= 32']);
  showmessage(IntToStr(q.ExecSql) + ' Registros borrados de la tabla '+Nombres[i]);
 end;
 finally 
    FreeAndNil(q);
 end;

Por supuesto, en el array de Nombres, las tablas irían puesta en orden inverso al que tú has redactado, precisamente para evitar el error de Master-Detail.

Sólo un detalle más, la variable Nombres no puede estar declarada en un procedimiento, ya que Delphi no deja inicializar variables en dicho lugar, debes ponerla como variable "global" del módulo.

Edito: Lo he escrito de memoria, si tienes algun problema comentalo.

Un saludo, y espero que todavía te sirva.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 04-08-2005 a las 15:13:17.
Responder Con Cita
  #2  
Antiguo 05-08-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Poder: 22
JuanBCT Va por buen camino
Hola Lepe! Gracias por tu respuesta, lo resolví mediante consultas como me sugeriste pero de otra manera:
Código Delphi [-]
       //========================================================================
      // * Hacer exactamente el mismo filtro para c/ tabla y borrar mediante una
      // sentencia SQL * =======================================================
      //========================================================================
         with query15 do
         begin
          close;
          sql.clear;
          sql.add ('SELECT * From Ordenes');
          sql.add ('Where Estado=:W_Estado and');
          sql.add ('f_factura <=:w_hasta');
          sql.add ('Order by F_Factura');
          Params[0].asstring;
          Params[1].asdate;
          Params.ParambyName('w_estado').asstring:='Facturada';
          Params.ParambyName('w_hasta').asdate:=Datetimepicker2.date;
          query15.Active:=true;
          open;
          first;
         end;
      //========================================================================
      // * Bien, acá tengo separado el grupo de ordenes que necesito. Entonces
      //   ahora la voy a recorrer e ir borrando sus "dependientes" * 
      //========================================================================
         while not Query15.EOF do
         begin
         //Borro NITEMREP
           with query3 do
           begin
            close;
            Databasename:='servicio';
            sql.clear;
            sql.add ('DELETE From NItemRep');
            sql.add ('Where Nro_Orden=:W_NumeOr');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro NITEMTER
           with query4 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE from NItemTer');
            sql.add ('Where Nro_Orden=:W_NumeOr1');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr1').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro NITEMMOB
           with query5 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From NItemMob');
            sql.add ('Where Nro_Orden=:W_NumeOr2');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr2').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro NITEMTEX
           with query6 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From NItemTex');
            sql.add ('Where Nro_Orden=:W_NumeOr3');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr3').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro NDB/NCR
           with query7 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From NdbNcr');
            sql.add ('Where Orden=:W_NumeOr4');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr4').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro vale
           with query8 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From Vale');
            sql.add ('Where Nro_Orden=:W_NumeOr5');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr5').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro ItemComb
           with query9 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From ItemComb');
            sql.add ('Where NroOrden_Combo=:W_NumeOr6');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr6').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro ItemObs
           with query10 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From ItemObs');
            sql.add ('Where Nro_Orden=:W_NumeOr7');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr7').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro ItemTex
           with query11 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From ItemTex');
            sql.add ('Where Nro_Orden=:W_NumeOr8');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr8').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro ItemTer
           with query12 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From ItemTer');
            sql.add ('Where Nro_Orden=:W_NumeOr9');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr9').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro ItemRep
           with query13 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From ItemRep');
            sql.add ('Where Nro_Orden=:W_NumeOr10');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr10').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro ItemMob
           with query14 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From ItemMob');
            sql.add ('Where Nro_Orden=:W_NumeOr11');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr11').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
         //Borro Ordenes
           with query16 do
           begin
            close;
            sql.clear;
            sql.add ('DELETE From Ordenes');
            sql.add ('Where Nro_Orden=:W_NumeOr12');
            Params[0].asinteger;
            Params.ParambyName('W_NumeOr12').asinteger:=query15['Nro_Orden'];
            ExecSql;
           end;
          //--------------------------------------------------
          query15.next;
          coolgauge4.Progress:=(Query15.RecNo*100) div Query15.RecordCount;
         end;
        //---------------------------------------------------
        query1.Active:=false;
        with query1 do
         begin
          close;
          sql.clear;
          sql.add ('SELECT * From Ordenes');
          sql.add ('Where Estado=:W_Estado and');
          sql.add ('f_factura <=:w_hasta');
          sql.add ('Order by F_Factura');
          Params[0].asstring;
          Params[1].asdate;
          Params.ParambyName('w_estado').asstring:='Facturada';
          Params.ParambyName('w_hasta').asdate:=Datetimepicker2.date;
          query1.Active:=true;
          open;
          first;
         end;

Un poco engorroso... pero funciona! De nuevo, gracias...

Juan
Responder Con Cita
  #3  
Antiguo 06-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Creo que deberías eliminar las lineas:

Params[0].asstring;
Params[1].asdate;
Y
Params[0].asinteger;

Que sobran en el código.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 06:00:26.


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
Copyright 1996-2007 Club Delphi