Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con SaveDialog (https://www.clubdelphi.com/foros/showthread.php?t=65183)

Efren2006 26-11-2009 01:36:43

Problema con SaveDialog
 
Saludos

Estoy haciendo una pequeña aplicacion para respaldar mi BD Firebird, el problema es que quiero que usuario seleccione la CARPETA donde se va a guardar el Respaldo, estoy utilizando el Componente SaveDialog pero no logro el efecto de seleccionar la carpeta si no selcciono un Archivo Determinado dentro de ella, Existe alguna manera de indicarle a este componente que pueda selccionar solo la Carpeta ??

roman 26-11-2009 02:27:44

Componentes como el SaveDialog están hechos para seleccionar archivos, no carpetas. Para esto último puedes usar la función SelectDirectory de la unidad FileCtrl. Busca en la ayuda acerca de esta función, porque tiene dos versiones. Una que te muestra el cuadro de diálogo estándar de Windows, y otra que te muestra uno más bien feo de antiguas versiones de Windows.

// Saludos

afunez2007 26-11-2009 17:00:15

1 Archivos Adjunto(s)
Asumiendo que la ruta origen esta en u Tlabel y el destino esta en un TEdit que puedes rellenar con SaveDialog, el codigo seria el siguiente:

Código Delphi [-]
WinExec(PChar('C:\Program Files\Firebird\Firebird_2_0\bin\gbak.exe -v -t -user SYSDBA -password "masterkey" '+lbl3.Caption+' '+edtruta.Text),SW_NORMAL);

Adjunto te envio el proyecto completo para que veas todos los pormenores, solo lo abres con delphi 7 y lo ejecutas de nuevo, porque he removido el exe ya compilado por temas de espacio

Saludos

Efren2006 27-11-2009 04:01:22

Cita:

Empezado por afunez2007 (Mensaje 347511)
Asumiendo que la ruta origen esta en u Tlabel y el destino esta en un TEdit que puedes rellenar con SaveDialog, el codigo seria el siguiente:


Código Delphi [-]
WinExec(PChar('C:\Program Files\Firebird\Firebird_2_0\bin\gbak.exe -v -t -user SYSDBA -password "masterkey" '+lbl3.Caption+' '+edtruta.Text),SW_NORMAL);





Adjunto te envio el proyecto completo para que veas todos los pormenores, solo lo abres con delphi 7 y lo ejecutas de nuevo, porque he removido el exe ya compilado por temas de espacio

Saludos


Amigo Afunez2007

Gracias por tu aporte, aunque estoy utilizando los componentes de IB que trae el D2009 para hacer el respaldo (TIBackupService)
Trate de Baja tu archivo adjunto pero me dice que el archivo esta dañado.


Cita:

Empezado por roman (Mensaje 347466)
Componentes como el SaveDialog están hechos para seleccionar archivos, no carpetas. Para esto último puedes usar la función SelectDirectory de la unidad FileCtrl. Busca en la ayuda acerca de esta función, porque tiene dos versiones. Una que te muestra el cuadro de diálogo estándar de Windows, y otra que te muestra uno más bien feo de antiguas versiones de Windows.

// Saludos

Amigo Roman

Hare la Prueba con la Funcion que me mencionas .

Los mantendre al Tanto

krlox31416 27-11-2009 09:06:40

respaldar
 
Buen día Efren2006 espero esto te pueda ayudar o por lo menos puedas hacer algunas modificaciones este codigo utiliza un componente ShellTreeView dependiendo de la ruta en que desees respaldar dale un click y despues dale aceptar(puedes ponerle el nombre que quieras al boton o bitbtn) deacuerdo al sig. código.

Código Delphi [-]
procedure TForm24.BitBtn1Click(Sender: TObject);
var PathDestino, Origen, aPath, Destino, my_mensaje : string;
sr: TSearchRec;// para definir el tipo de busqueda
begin
my_mensaje:='Y se han guardado en la siguiente ubicación.'+#13;
PathDestino := ShellTreeView1.SelectedFolder.PathName+'\[ Respaldo Base de Datos Sistema Caja ]'; //creamos el nombre de mi carpeta y concatenamos al directorio
if not DirectoryExists(PathDestino) then // verifica que no exista una carpeta con el nombre Respaldo al directorio destino
   begin
   aPath := 'C:\sistema_caja\base de datos\';//asignamos el origen de mis tablas
   if FindFirst(aPath + '*.db', faAnyFile, sr) = 0 Then  //busca el primer archivo .db o cualquiera
   repeat
   CreateDir(PathDestino); //Creamos el directorio ...................
   Origen := aPath+sr.Name;//directorio origen o path
   Destino :=  PathDestino+'\'+ sr.Name; //aqui agregamos las tablas a la carpeta
   CopyFile(PChar(Origen), PChar(Destino), False);// copiamos de mi origen al destino
   until FindNext(sr) <> 0;// hacer todo el recorrido hasta encontrar mi archivo
   SysUtils.FindClose(sr);//cerramos la busqueda del archivo
   Application.MessageBox('Las bases de datos se han respaldado ! ! ! ','Información',MB_ICONINFORMATION);
   MessageDlg( my_mensaje + ShellTreeView1.SelectedFolder.PathName + '\[ Respaldo Base de Datos Sistema Caja ]',mtInformation,[mbOK],0);
   end
   else
   begin
   Application.MessageBox('La carpeta ya existe.','Error',MB_ICONERROR);
   Application.MessageBox('Por el momento no es necesario respaldar en esta ubicación ! ! !','Suerte',MB_ICONINFORMATION);
   end;
end;

Nota: Si deceas guardar un excel o word basta cambiar la extención del archivo *.db por *.xls *.doc etc.

Saludos y espero que esto sea lo que buscas! : )

afunez2007 28-11-2009 16:14:01

si Me das un email te envio el ejemplo y solo tendrias que reemplazar la rutina de backup con lo que utilizan los componentes que estas usando

afunez2007 28-11-2009 17:30:48

Cita:

Empezado por afunez2007 (Mensaje 347678)
si Me das un email te envio el ejemplo y solo tendrias que reemplazar la rutina de backup con lo que utilizan los componentes que estas usando

es raro que digas que te da error, yo descargue el archivo y lo puedo abrir sin problemas

Saludos

afunez2007 28-11-2009 18:08:17

Partiendo del hecho que lo quieres hacer usando los componentes IB podria ser asi:
Código Delphi [-]
  try
    IBBackupService1.Active := true;
    IBBackupService1.Options := [IgnoreLimbo]+[NoGarbageCollection]+[NonTransportable];
    IBBackupService1.BackupFile.Clear;
    IBBackupService1.BackupFile.Text:=edtRuta.Text;
    IBBackupService1.BackupFile.Create;
    IBBackupService1.ServiceStart;
    while not IBBackupService1.Eof do
    begin
      s := IBBackupService1.GetNextLine;
    end;
  finally
    ShowMessage('Copia de seguridad realizada con exito');
  end;

La unica desventaja es que solo puedes escoger rutas que esten en el servidor, ya que el servicio no puede transportar el archivo automaticamente a otra pc si lo estas haciendo desde en equipo remoto.

a diferencia de la otra opcion que te habia enviado con el gbak.

edtRuta.Text es un t edit que lo debes llenar con un Save dialog que llamas desde un boton con el siguiente codigo:
Código Delphi [-]
if dlgSave1.Execute then
begin
  edtRuta.Text:=dlgSave1.FileName;
end;

en el save dialog debes configurar las siguientes propiedades:
DefaultExt=*.fbk
Filter=FireBird Backup (*.fbk)|*.fbk

Saludos

Efren2006 30-11-2009 16:32:03

Cita:

Empezado por afunez2007 (Mensaje 347680)
Partiendo del hecho que lo quieres hacer usando los componentes IB podria ser asi:

Código Delphi [-]
try
IBBackupService1.Active := true;
IBBackupService1.Options := [IgnoreLimbo]+[NoGarbageCollection]+[NonTransportable];
IBBackupService1.BackupFile.Clear;
IBBackupService1.BackupFile.Text:=edtRuta.Text;
IBBackupService1.BackupFile.Create;
IBBackupService1.ServiceStart;
while not IBBackupService1.Eof do
begin
s := IBBackupService1.GetNextLine;
end;
finally
ShowMessage('Copia de seguridad realizada con exito');
end;





La unica desventaja es que solo puedes escoger rutas que esten en el servidor, ya que el servicio no puede transportar el archivo automaticamente a otra pc si lo estas haciendo desde en equipo remoto.

a diferencia de la otra opcion que te habia enviado con el gbak.

edtRuta.Text es un t edit que lo debes llenar con un Save dialog que llamas desde un boton con el siguiente codigo:

Código Delphi [-]
if dlgSave1.Execute then
begin
edtRuta.Text:=dlgSave1.FileName;
end;





en el save dialog debes configurar las siguientes propiedades:
DefaultExt=*.fbk
Filter=FireBird Backup (*.fbk)|*.fbk

Saludos

Amigo

Gracias por tu ayuda, efectivamente asi como me lo describes lo estoy haciendo solo me faltaba era que el usuario me indicara la carpeta donde hiba a registrar el Backup, con la opcion que me dio ROMAN todo quedo muy bien.

Saludos


La franja horaria es GMT +2. Ahora son las 00:34:46.

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