Delphi - Restauracion

 
Vista:

Restauracion

Publicado por Roberto Garcia (21 intervenciones) el 05/06/2005 06:09:53
Hola

Tengo el siguientes problema

Tengo una aplicacion que respalda y restura sus archivos de su base de datos.

Respaldar esta funcionando muy bien, pues solo copia los archivos actuales de la base de datos a otra ubicacion.

Restuarar me presenta dos problemas.
(Restaurar copia los archivos previamentes respaldados a la carpeta de la base de datos de la aplicacion)

1. No me deja copiar los archivos con extension .px (Paradox claro), pero los .db si, al momento que intenta copiar algun archivo .PX, me manda un mensaje que dice que no se puede copiar el archivo (bueno, mas bien el mensaje lo mando yo), y enseguida me manda un error de "Path No Found"

2. No se como hacer para que los archivos respalados se copien directamente en la carpeta de la base de datos de la palicacion que se llama "tablas\", para obtener el directorio desde donde se ejecuta la aplicacion hago lo siguiente:

{1} copiar:=application.ExeName;
{2} delete(copiar,pos('DICCIONARIO.EXE',copiar),length('diccionario.exe'));
{3} copiar:=copiar+'tablas\';

{1} Obtengo la ruta completa desde donde se ejecuta el programa
{2} Como la ruta incluye el nombre del .EXE tengo que borrar el nombre
{3} Luego "me cambio" a la carpeta tablas

esto es muy temerario porque es algun momento al usuario se le puede ocurrir cambiar el nombre del ejecutable, que es muy poco probable, pero en fin, como puedo hacer para obtener la ruta completa desde donde se ejecuta el programa, sin que se incluya el nombe del .exe

A continuacion el codigo del procedimiento "Restaurar"

copiar:=application.ExeName;
delete(copiar,pos('DICCIONARIO.EXE',copiar),length('diccionario.exe'));
copiar:=copiar+'tablas';

for i:= 0 to fl1.itemindex do begin
if fl1.selected[i] then begin

copiar:=copiar+'\'+fl1.items[i];

ruta.caption:=copiar;
if cancelado then begin
EFinRespaldo;
application.MessageBox('El respaldo ha sido cancelado por el usuario','Proceso finalizado',mb_ok+mb_IconWarning);
break;
end;
application.ProcessMessages;
if dl1.itemindex=0 then
origen:=dl1.getitempath(0)+fl1.items[i]
else
origen:=dl1.Directory+'\'+fl1.items[i];

if not CopyFile(PChar(origen),PChar(copiar),false) then begin
application.MessageBox('No se pudo copiar el archivo','Proceso finalizado', mb_ok+mb_IconWarning);
cancelado:=true;
end;

end;// if fl1.selected[i]
end;//for

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Restauracion

Publicado por BigLuis (713 intervenciones) el 05/06/2005 11:41:25
Prueba esto que he rescatado del viejo baul, pues hace mucho que no trabajo con Paradox ni BDE.
Para el Path de la aplicacion ExtractFilePath(Application.Exename) o ExtractFilePath(ParamStr(0))
Procedure TFormCopiasdeSeguridad.CopiarTabla(FromDir,ScrTBLName,ToDir,DestTBLName:String);
var
DBHandle:HDBIDB;
ResultCode:DBIResult;
Scr,Dest,Err:Array[0..255] of Char;
ScrTbl,DestTbl:TTable;
Begin
ScrTbl:=Ttable.Create(Application);
DestTbl:=Ttable.Create(Application);
try
ScrTbl.DatabaseName:=FromDir;
ScrTbl.TableName:=ScrTblName;
ScrTbl.Open;
DBHandle:=ScrTbl.DBHandle;
ScrTbl.Close;
ResultCode:=DBICopyTable(DBHandle,True,StrPCopy(Scr,FromDir //Con True machaca
+ScrTblName),nil,StrPCopy(Dest,ToDir+DestTblName)); //las tablas.
if (ResultCode<>DBIERR_NONE) then
begin
DbiGetErrorString(ResultCode,Err);
raise EDatabaseError.Create('Mientras se copiaba la tabla'+#13+
FromDir+ScrTblName+ 'a'+ Todir+DestTblName+#13+
'se ha generado el error'+StrPas(Err));
end;
finally
ScrTbl.Free;
DestTbl.Free;
end;
end;

procedure TFormCopiasdeSeguridad.BitCopiaDiscoDuroClick(Sender: TObject);
var
FromDir,ScrTblName,ToDir,DestTblName:String;
Contador:Integer;
Lista:TStringList;
FormProgresoCopia:TFormProgresoCopia;
begin
Lista:=TStringList.Create;
Session.GetTableNames(AliasTablas,
'',True, False, Lista);
if lista.count<0 then
begin
showmessage('No existen tablas en el directorio '+PathTablas);
exit;
end;
FromDir:=PathTablas;
NTablas:=Lista.Count;
FormProgresoCopia:=TFormProgresoCopia.Create(self);
Try
FormProgresoCopia.Show;
for Contador:=0 to Lista.Count-1 do
begin
FormProgresoCopia.OnOffLabel1.Caption:='COPIANDO TABLAS....';
ScrTblName:=Lista[Contador];
ToDir:=Pathsegur;
DestTblName:=Lista[Contador];

FormProgresoCopia.StaticText1.Caption:='';
FormProgresoCopia.Gauge1.MaxValue:=NTablas-1;
FormProgresoCopia.Gauge1.Progress:=0;
FormProgresoCopia.StaticText1.Caption:=InttoStr(NTablas-Contador);
FormProgresoCopia.StaticText1.Refresh;
FormProgresoCopia.Gauge1.Progress:=Contador;
FormProgresoCopia.Label2.Caption:='en '+PathSegur;
FormProgresoCopia.StaticText1.Caption:=InttoStr(NTablas);

CopiarTabla(FromDir,ScrTblName,ToDir,DestTblName);
FormProgresoCopia.Edit1.Text:=Lista[Contador];
FormProgresoCopia.Edit1.Refresh;
FormProgresoCopia.LabeL3.Caption:='ULTIMA TABLA COPIADA';
FormProgresoCopia.OnOffLabel1.Caption:='TABLAS COPIADAS....';
end;
finally
Lista.Free;
end;
end;

procedure TFormCopiasdeSeguridad.BitRestauraDiscoDuroClick(Sender: TObject);
var
FromDir,ScrTblName,ToDir,DestTblName:String;
Contador:Integer;
I:Integer;
Lista:TStringList;
FormProgresoCopia:TFormProgresoCopia;
begin
Lista:=TStringList.Create;
Session.GetTableNames(AliasSegur,
'',True, False, Lista);
if lista.count<0 then
begin
showmessage('No existen tablas en el directorio '+ PathSegur);
exit;
end;
FormProgresoCopia:=TFormProgresoCopia.Create(self);
FormProgresoCopia.OnOffLabel1.Caption:='CERRANDO TABLAS....';
FormProgresoCopia.Show;

With Modulo do
begin
for I:=0 to ComponentCount-1 do
If Components[I] is TDataset then
TDataset(Components [I]).Close;
end;
FromDir:=PathSegur;
NTablas:=Lista.Count;
Try
for Contador:=0 to Lista.Count-1 do
begin
FormProgresoCopia.OnOffLabel1.Caption:='COPIANDO TABLAS....';
ScrTblName:=Lista[Contador];
ToDir:=PathTablas;
DestTblName:=Lista[Contador];

FormProgresoCopia.StaticText1.Caption:='';
FormProgresoCopia.Gauge1.MaxValue:=NTablas-1;
FormProgresoCopia.Gauge1.Progress:=0;
FormProgresoCopia.StaticText1.Caption:=InttoStr(NTablas-Contador);
FormProgresoCopia.StaticText1.Refresh;
FormProgresoCopia.Gauge1.Progress:=Contador;
FormProgresoCopia.Label2.Caption:='en '+PathTablas;
FormProgresoCopia.StaticText1.Caption:=InttoStr(NTablas);

CopiarTabla(FromDir,ScrTblName,ToDir,DestTblName);
FormProgresoCopia.Edit1.Text:=Lista[Contador];
FormProgresoCopia.Edit1.Refresh;
FormProgresoCopia.LabeL3.Caption:='ULTIMA TABLA COPIADA';

FormProgresoCopia.OnOffLabel1.Caption:='ABRIENDO TABLAS ....';

end;
finally
Lista.Free;
With Modulo do
begin
for I:=0 to ComponentCount-1 do
If Components[I] is TDataset then
TDataset(Components [I]).Open;
for I:=0 to ComponentCount-1 do
If Components[I] is TQuery then
TDataset(Components [I]).Close;
end;
FormProgresoCopia.OnOffLabel1.Caption:='TABLAS ABIERTAS....';
end;
end;
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar