PDA

Ver la Versión Completa : IBX + delphi7 + Implementacion profesional de Backup


gorsan
21-11-2007, 09:17:48
Hola a todos.
Ya tengo practicamente acabada mi nueva aplicacion pero para finalizar necesito que determinado usuario pueda realizar copias de seguridad de toda la base de datos IBX. He estado mirando en la ayuda de D7 y he encontrado lo siguiente:

procedure TForm1.Button2Click(Sender: TObject);
begin
with IBBackupService1 do
begin
ServerName := 'Poulet';
LoginPrompt := False;
Params.Add('user_name=sysdba');
Params.Add('password=masterkey');
Active := True;
try
Verbose := True;
Options := [MetadataOnly, NoGarbageCollection];
DatabaseName := 'c:\interbase\examples\database\employee.gdb';
BackupFile.Add('c:\temp\e1.gbk = 2048');
BackupFile.Add('c:\temp\e2.gbk' = 4096);
BackupFile.Add('c:\temp\e3.gbk'); ServiceStart;
While not Eof do
Memo1.Lines.Add(GetNextLine);
finally
Active := False;
end;
end;
end;

Se realiza con un componente llamado IBBackupService que viene integrado en Delphi 7. Pero no me gusta la implementacion. ¿Alguien me puede echar un cable? Muchas gracias.

Casimiro Notevi
21-11-2007, 10:51:15
¿Y qué parte no te gusta? :confused:

gorsan
21-11-2007, 12:48:59
En primer lugar: Gracias por contestar.
No me gusta porque creo que no está bien implementado de cara al usuario. Si ejecuto ese codigo la copia de seguridad se realiza sin problemas segun el nombre/s que yo le asigno pero lo que no me gusta es:
1. Tarda bastante y el programa se queda como bloqueado. El usuario puede pensar que se ha bloqueado el pc. Deduzco que la tardanza se debe a la negociacion que realiza el componente de cara al acceso a la bd.
2. Una vez que empieza a escribir en el control memo lo hace tan rapido que no se lee nada porque cierra el formulario.

Vamos, en definitiva, pienso se podría implementar mejorando estos aspectos pero ¿como? Por ejemplo para solucionar el primer punto se podria conectar una barra de proceso terminado en tanto por ciento. Pero no se como realizar esto.

Un saludo.

Casimiro Notevi
21-11-2007, 13:36:33
[..]lo que no me gusta es:
1. Tarda bastante y el programa se queda como bloqueado. El usuario puede pensar que se ha bloqueado el pc. Deduzco que la tardanza se debe a la negociacion que realiza el componente de cara al acceso a la bd.

Está haciendo un backup de la base de datos, el usuario debería esperar a que termine y nada más. La rapidez (o lentitud) dependerá de muchos factores, ordenador, discos, tipo y sistema operativo del servidor, etc.

2. Una vez que empieza a escribir en el control memo lo hace tan rapido que no se lee nada porque cierra el formulario.

¿No se lee nada?, bueno, no creo que el usuario entienda (o tenga que entender) lo que pone, a fin de cuentas es una lista de dominios, tablas con sus campos, procedimientos, triggers, etc.
Lo de que se cierra el formulario... pues habría que ver cómo lo haces, porque esa ese procedure que has puesto lo único que hace es mandar la salida del gbak a un memo, por si quieres leerlo o guardarlo. Lo que hagas con el formulario donde está el memo... eso depende de tí y de cómo quieras presentarlo.

tefots
21-11-2007, 13:51:47
Hay varias formas de evitar que la aplicacion se quede esperando a que finalize el backup.

la primera y mas facil es poner vervose=false
en este caso , al llamar a start service , el backup se realiza , pero el control vuelve inmediatamente a la aplicacion, con lo que el servidor firebird sigue haciendo el backup por su cuenta y la aplicación puede continuar su proceso normal.

si necesitas guardar el resultado del backup, entonces tienes que crear un thread , y en el execute de ese thread realizar el backup tal como lo estas haciendo . así la aplicación puede continuar , y cuando el thread finalize o el backup finalice , entonces informar al usuario que el backup se ha realizado.
si usas threads para realizar el backup , ten en cuenta que el thread ha de tener su propia ibtransaccion y su propio ibdatabase , de lo contrario te cascara , ya que estos componentes ibx no son threadsafe.

saludos.



saludos.

gorsan
21-11-2007, 13:54:09
Bueno lo que he querido decir es que para ocupar el tiempo que el programa emplea en hacer el backup no estaría nada mal poner una barra de proceso o algo asi para dar la sensacion de que le programa esta haciendo algo. Pero no se como realizar esto.
En cuanto a lo de que se cierra el formulario y no se lee nada del control memo, me he dado cuenta que es por la forma en que muestro el formulario. Lo estaba haciendo con showmodal y eso hace que se cierre cuando acaba. Ahora le muestro solo con el metodo show y ya se puede leer el contenido del memo.