Ver Mensaje Individual
  #11  
Antiguo 04-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
Lepe Va por buen camino
Yo no sé ni por donde entrar a este tema. No te lo tomes a mal, solo voy a enumerar los posibles fallos/defectos que le veo a la implementación actual:

1 - Crear una ventana por cada registro existente en la tabla es demasiado; si hay 40 registros.... ¿40 ventanas que el usuario tiene que hacer clic?¿para qué? si no se le deja eligir nada al usuario, acto seguido se borra el registro por código delphi.

2 - No veo que se destruya la ventana Form23 por ningún lado, hay varias formas, pero lo más fácil sería en el OnClose de TForm23 añadir :
Código Delphi [-]
action := cafree;
Form23:= nil;

3 - El "Adotable2.Next" sobra, ya que al borrar un registro, automáticamente se muestra el siguiente en los controles DBAware, si además hacemos un .Next, estamos saltando un registro sin borrarlo.

Y todo esto sin entrar en diferentes hilos de ejecución, concurrencia, etc. Por que si el Thread está borrando registros, no quiero saber lo que hará la aplicación principal con otro Adotable que intente editar esos registros ya borrados.

Si quieres informar al usuario que se ha borrado 20 registros, hazlo así:
Código Delphi [-]
const Linea = ' Llave Primaria : %s, Campo1 %s, Campo2 %s'+ #10#13;
Mensaje :string;
begin 
  Mensaje := 'Se han borrado los siguientes registros'+ #10#13;
//  no estoy seguro que Recordcount dé el valor que esperas, al menos en los 
//  foros siempre se ha dicho que devuelve -1. Compruébalo.
if not(ADOtable2.IsEmpty) then 
   begin
   ADOTable2.First;
    while  not ADOtable2.eof  do
      begin
        Mensaje := Mensaje + Format(linea, 
                                            [ adotable2CampoLLave.Value,
                                            adotable2CAmpo1.Value,
                                            adotable2Campo2.Value ]);
        ADOTable2.Delete;
      end;
     ShowMessage(Mensaje);
   end;
En lugar de un ShowMessage, podrías mostrar un Form con un Memo, dentro del memo añade ese "mensaje", será más cómodo para el usuario.

Campo1, CAmpo2, son dos campos que quieres mostrar al usuario para que entienda el mensaje, por ejemplo el número de factura que se ha borrado o el nombre del cliente que se ha borrado (es un ejemplo, claro).


De esta forma, el usuario no tiene que hacer clic en ninguna ventana, pero tiene el resumen de lo que ha pasado.

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