Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2009
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
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 ??
Responder Con Cita
  #2  
Antiguo 26-11-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 26-11-2009
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

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
Archivos Adjuntos
Tipo de Archivo: zip IbBackup.zip (11,4 KB, 25 visitas)
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #4  
Antiguo 27-11-2009
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
Cita:
Empezado por afunez2007 Ver Mensaje
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 Ver Mensaje
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
Responder Con Cita
  #5  
Antiguo 27-11-2009
Avatar de krlox31416
krlox31416 krlox31416 is offline
Miembro
 
Registrado: jun 2008
Ubicación: San Juan del Río, Querétaro, México
Posts: 75
Poder: 16
krlox31416 Va por buen camino
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! : )
__________________
el cielo me dio un cariño sin merecerlo... chimikuilo!!!
Responder Con Cita
  #6  
Antiguo 28-11-2009
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

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
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #7  
Antiguo 28-11-2009
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Cita:
Empezado por afunez2007 Ver Mensaje
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
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #8  
Antiguo 28-11-2009
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

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
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #9  
Antiguo 30-11-2009
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
Cita:
Empezado por afunez2007 Ver Mensaje
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
Responder Con Cita
Respuesta



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
SaveDialog y Windows CE manueljgomezc Varios 0 18-08-2008 17:36:20
SaveDialog rauros OOP 1 07-08-2008 14:47:21
problema con saveDialog .. tato_pincha87 Varios 5 26-03-2008 17:24:12
Problema por el SaveDialog tramjauer Varios 1 27-04-2007 18:12:17
SaveDialog con WinExec!! lduron Varios 2 16-06-2006 16:12:07


La franja horaria es GMT +2. Ahora son las 00:42:36.


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