Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-12-2015
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
abortar proceso y mostrar estado

Buenas tardes a todos!,

Os comento por encima lo que quiero realizar.

Estoy programando una aplicación en C++Builder XE3, la cual consulta una base de datos de Access (MDB) de clientes y con un boton mando publicidad personalizando el mail con archivos adjuntos a todos los clientes que cumplan con unos requisitos concretos (vamos una especie de SPAM automático).

El caso es que me funciona perfectamente tanto la conexión a mi BBDD, como la actualización y consulta de información y el envío de mails de forma automática. El problema que tengo es que (de momento estoy haciendo pruebas con una BBDD con pocos clientes ficticios para verificarlo) cuando le doy al botón enviar el programa se queda pensando hasta que manda todos los correos de golpe y no me actualiza las variables intermedias ni me deja la posibilidad de cancelar el envio tras terminar una transacción correcta (para evitar datos corruptos en la BBDD).

Para realizar el envio multiple hago una consulta a la BBDD con el filtrado deseado y acto seguido con un bucle for voy linea a linea enviando los mails y actualizando la BBDD hasta que termino de recorrer la tabla.

Dentro del bucle tengo el siguiente código:

Código:
			// PROCEDEMOS A SU ENVIO
			try{
				IdSMTP1->Connect();
				IdSMTP1->Send(Form1->IdMessage1);
				contadorEmailsEnviados++;


				DBConnectionBBDD->BeginTrans();
				try{
				// Actualizamos la ruta en la BBDD en la sección de configuración
				strSQL = "UPDATE ... (no es importante)
				cmdBBDD->CommandText = strSQL;
				cmdBBDD->Execute();

				DBConnectionBBDD->CommitTrans();
				}

				catch(Exception &exception){
					DBConnectionBBDD->RollbackTrans();
					Application->ShowException(&exception);
				}
			}
			catch(Exception &exception)
			{
				Application->ShowException(&exception);
				Label1->Caption = "¡Error!";
				break;
			}
			IdSMTP1->Disconnect();
			IdMessage1->Clear();

			Label1->Caption = contadorEmailsEnviados;
	//		Application->MessageBoxW(L"Todo ok, pasamos al siguiente.",L"Info",MB_OK+ MB_ICONERROR);
		} // Fin de condicion IF (no la he pegado)
	}// fin bucle for
En Label1 muestro el nº conforme se van enviando, pero por contra el programa se queda "atascado" hasta que envia todos y entonces ya me aparece el valor final.
Sin embargo si descomento la linea donde sale el MessageBox, en el momento de envio me sale ese mensaje (que no sirve para nada), pero sí que se actualiza la variable contadorEmailsEnviados en cada envio.

¿Se os ocurre alguna forma de poder mostrar en tiempo real cada vez que se envie un email e incluso con un boton poder abortar?
¿habría que iniciar otro proceso para evitar bloquear el programa y consultar el estado de una variable para finalizar todos los pasos intermedios y asi evitar corromper la BBDD?
¿Como se haria?

Muchas gracias de antemano y un abrazo!
Responder Con Cita
 



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
mostrar animación con mensaje durante un proceso vicens22 Desarrollo en Delphi para Android 5 15-05-2014 13:48:02
Mostrar en Progress Bar un proceso matti Varios 4 31-05-2011 14:55:01
Mostrar el estado del programa. mcalmanovici Varios 3 25-03-2008 20:02:18
Como abortar correctamente un proceso que es interrumpido por el cierre del Form gluglu Varios 10 28-08-2007 15:41:03
Abortar un proceso TONIAM Varios 10 31-05-2007 19:26:41


La franja horaria es GMT +2. Ahora son las 13:54:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi