Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-12-2007
jef jef is offline
No confirmado
 
Registrado: dic 2007
Posts: 14
Poder: 0
jef Va por buen camino
En estos momentos el bitbtn, no tiene OnClick.
En Miscellaneous tiene los valores

Default = True
ModeResult = mrOK
Responder Con Cita
  #2  
Antiguo 04-12-2007
Avatar de white_zombie
[white_zombie] white_zombie is offline
Miembro Premium
 
Registrado: nov 2005
Ubicación: Zaragoza - España
Posts: 187
Poder: 21
white_zombie Va por buen camino
Supongo que ya has lo has intentado pero intenta depurar, pon un punto de ruptura en el bucle y ve ejecutando paso a paso a ver que hace donde va la ejecucion una vez parado el bucle.
Responder Con Cita
  #3  
Antiguo 04-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
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
  #4  
Antiguo 04-12-2007
jef jef is offline
No confirmado
 
Registrado: dic 2007
Posts: 14
Poder: 0
jef Va por buen camino
Intentaré explicarme algo mejor

- El primer thread genera esta tabla con determinados registros de otra para no parar el proceso mientras se responde a las pantallas mostradas
- El segundo thread debe mostrar la información al usuario, quien debe confirmar en la modal el enterado y entonces se borra el registro.
- como caso excepcional debiera haber a lo sumo 4 o 5 registros en espera de respuesta, con lo que si las pantallas quedasen anidadas, miel sobre ojuelas.
-Que se intente grabar en la tabla justo en el mismo instante en que se borra?
-Pude ser un riesgo, pero, no se me ocurre otra forma de disparar un aviso automatico, cuando se graba 1 registro en la tabla que no sea, con un thread preguntando permanentemente
Responder Con Cita
  #5  
Antiguo 04-12-2007
jef jef is offline
No confirmado
 
Registrado: dic 2007
Posts: 14
Poder: 0
jef Va por buen camino
Un ejemplo (no real) para entender mejor lo anterior, pdria ser:

Un contador númerico, va grabando su contenido en una tabla, conforme incrementa su valor.
Determinados valores (aleatorios) de esa tabla generan un aviso, que debe ser confirmado por un usuario, pero en tanto el usuario responde el contador no debe parar y seguir incrementando su tabla.
Responder Con Cita
  #6  
Antiguo 04-12-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
No voy a criticar tu forma de interactuar con el usuario, auque como h a dicho lepe, puede ser un poco incomodo estar haciendo clic, clic, clic.....

Fijate que lo que te sucede es cuando un thread termina repentinamente es porque ha ocurrido una acepción en este y normalmente delphi no te informa sobre las ecepciones en los threads [solo cuando estás en modo debugger].

Exception class EOSError with message 'System Error. Code: 1400.
El identificador de la ventana no es válido'.


esto sucede a como lo ha dicho lepe a que no destruyes la ventana a utilizar.
A mi punto de vista tienes dos alternativas:
Esta es la que te recomiendo:
Código Delphi [-]
procedure TForm2.IdThreadComponent2Run(Sender: TIdThreadComponent);

begin
if ADOtable2.RecordCount > 0 then
   begin
   ADOTable2.First;
   Try
   Form23 := TForm23.Create(self);
    while  not ADOtable2.eof  do
      begin
        Form23.showModal;
        ADOTable2.Delete;
      //  ADOTable2.Next;
      end;
    Finally
    Form23.Free;
    end; 
   end;
end;

Ó:

Código Delphi [-]
procedure TForm2.IdThreadComponent2Run(Sender: TIdThreadComponent);

begin
if ADOtable2.RecordCount > 0 then
   begin
   ADOTable2.First;
    while  not ADOtable2.eof  do
      begin
        Form23 := TForm23.Create(self);
        Form23.showModal;
        ADOTable2.Delete;
      //  ADOTable2.Next;
        Form23.Free; 
      end;
   end;
end;
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #7  
Antiguo 04-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Cita:
Empezado por jef Ver Mensaje
- El segundo thread debe mostrar la información al usuario, quien debe confirmar en la modal el enterado y entonces se borra el registro.
En algunas empresas, es el modelo de trabajo; como es requerido por los jefes, los usuarios deben dar el clic. Dicho de otra forma: "los jefes quieren tener a una persona que culpar de cualquier fallo ".

No había caído en ese detalle, gracias por la aclaración.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 04-12-2007
jef jef is offline
No confirmado
 
Registrado: dic 2007
Posts: 14
Poder: 0
jef Va por buen camino
Ante todo quiero darte las gracias por el interes mostrado, al intentar colaborar conmigi.

Última edición por marcoszorrilla fecha: 11-12-2007 a las 06:55:29.
Responder Con Cita
  #9  
Antiguo 04-12-2007
jef jef is offline
No confirmado
 
Registrado: dic 2007
Posts: 14
Poder: 0
jef Va por buen camino
DRAW,
gracias por tu aportación, debo decirte que de tus dos opciones, la primera con un pequeño retoque parece que funciona, con la peueña salvedad que la modal no se actualiza. Supongo que es porque al quedar fuera del while, loscampos de la modal que por defecto estan basados en la tabla no se reinicializan.
Voy a probar a dar valor a los campos antes de llamar a la modal.

saludos
Responder Con Cita
  #10  
Antiguo 04-12-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por jef Ver Mensaje
Ante todo quiero darte las gracias por el interes mostrado, al intentar colaborar conmigi, .
Y tu crees que nosotros estamos aqui esperando a ver quien entra para solucionarle la vida y de paso para que un vulgar pretencioso quiera venirnos a decir que el si es profesional y no esta de ocioso, aqui los conocimientos se comparten de la misma forma que se tiene sentido del humor, he leido lo que nuestro amigo Lepe te ha comentado y francamente no veo el porque de tu diparatado comentario, no solo ofendes a Lepe que dista mucho de ser lo que dices, hay que investigar antes de hablar, sino que estas ofendiendo a todo el foro porque efectivamente, Lepe es de los que le dan vida y representa dignamente el foro.

Vaya lo quer tiene uno que leer en esto dias,
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por marcoszorrilla fecha: 11-12-2007 a las 06:57:19.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Thread OnShow walito Varios 4 17-10-2007 00:36:24
Thread bendito thread...se me pierde la ventana Seba.F1 API de Windows 5 02-02-2006 00:16:30
thread transparente piccolo2101 API de Windows 3 13-01-2006 10:45:42
Thread y Form progmaq Varios 4 31-03-2005 14:16:50
Terminar Thread coulthard Internet 3 28-11-2004 22:05:08


La franja horaria es GMT +2. Ahora son las 13:00:53.


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