Array
(
)

Backup em CD

Mahdak
   - 20 jan 2006

Caros colegas. estou precisando fazer uma rotina para realizar backup em cd.
dei uma procurada no forum e vi um post bem legal:

http://forum.clubedelphi.net/viewtopic.php?t=50462&highlight=backup

- ai fala algo sobre usar o InCD. Entao o que fiz foi o seguinte:

1. instalei o InCd 4

2. criei um código para compactar meu banco e em seguida copia-lo para o Cd.

- O problema é que o sistema nao copia para o CD. vou colar o código aqui e quem puder me auxiliar na questão agradeço

uses
ShellApi

#Código



procedure TBackup.IniciarBackupClick(Sender: TObject);
var
sl: TStringList; //compactação do arquivo
NewFileName: string; //compactação do arquivo
Dados: TSHFileOpStruct; // copia do arquivo para cd

begin

Memo1.Lines.Add(´Compactando o arquivo...´);
if not assigned(fzip) then
begin
sl := TStringList.Create;
NewFileName := ExtractFilePath(Application.ExeName);
try
sl.Add(NewFileName+´\ADM.FDB´);
fzip := TZipThread.Create(´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´,sl,Memo1,false);
finally
sl.Free;
end;
Memo1.Lines.Add(´Arquivo Compactado...´);
end;

Memo1.Lines.Add(´Copiando o arquivo para o Cd...´);
FillChar(Dados,SizeOf(Dados), 0);
with Dados do
begin
NewFileName := ExtractFilePath(Application.ExeName);
wFunc := FO_COPY;
pFrom := PChar(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´);
pTo := PChar(DRIVE_CDROM);
fFlags:= FOF_ALLOWUNDO;
end;
SHFileOperation(Dados);
Memo1.Lines.Add(´Backup realizado com sucesso...´);


end;




Lindomar.des
   - 20 jan 2006

colega,

uso um método parecido com o seu, só q p/ copiar p o cd uso a instrução:

CopyFile(Path1 + sBackup, Path2 + sBackup);

uso um cd-rw e pelo incd mando formatar e funciona blz.

Lindomar


Mahdak
   - 20 jan 2006


Citação:
colega,

uso um método parecido com o seu, só q p/ copiar p o cd uso a instrução:

CopyFile(Path1 + sBackup, Path2 + sBackup);

uso um cd-rw e pelo incd mando formatar e funciona blz.

Lindomar



Lindomar, seguindo sua sugestão fiz isso:

#Código


Memo1.Lines.Add(´Copiando o arquivo para o Cd...´);
NewFileName := ExtractFilePath(Application.ExeName);
CopyFile(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´, DRIVE_CDROM+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´,True);
Memo1.Lines.Add(´Backup realizado com sucesso...´);


o erro gerado foi o seguinte:

[Error] Unit_Bkp.pas(93): Incompatible types: ´String´ and ´PAnsiChar´

alguma sugestão?


Lindomar.des
   - 20 jan 2006

mahdak,

qual o tipo da variavel/constante de: DRIVE_CDROM

Lindomar.


Christian_adriano
   - 20 jan 2006

Mahdak,

Use o código assim:

#Código

Memo1.Lines.Add(´Copiando o arquivo para o Cd...´); 
NewFileName := ExtractFilePath(Application.ExeName);
CopyFile(PChar(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´, DRIVE_CDROM+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´),True);
Memo1.Lines.Add(´Backup realizado com sucesso...´);



E não esqueça que para funcionar o InCD precisa ser um CD-RW formatado (pelo InCD).

Espero ter ajudado.

[]´s.


Edilcimar
   - 20 jan 2006

Eu faço a cópia através do incd e o winzip, basta apenas uma única linha
If RadioGroup1.ItemIndex = 0 then
Caminho := ´D:\´
Else If RadioGroup1.ItemIndex = 1 then
Caminho := ´E:\´
Else If RadioGroup1.ItemIndex = 2 then
Caminho := ´F:\´
Else If RadioGroup1.ItemIndex = 3 then
Caminho := ´G:\´
Else If RadioGroup1.ItemIndex = 4 then
Caminho := ´H:\´
Else
Caminho := ´I:\´;
Dia := Copy(DateToStr(Date),1,2);
Caminho := Caminho + Dia +´\´;
If not DirectoryExists(Caminho) then
If not CreateDir(Caminho) then
Raise Exception(´Não foi possível criar o diretório ´ + Caminho);
If DirectoryExists(Caminho) then
Begin
Caminho := Caminho + ´NomeDoArquivoDeBackup´;
WinExec(PChar(´C:\Arquivos de Programas\WinZip\WinZip32 -min -a -p ´´+Caminho+´´ ´+ ´´´ + ´*.*´+ ´´´),1);
End;


Thiagopedro
   - 20 jan 2006

Colegas, tenho utilizando Magic CD Burner.

Muito bom por sinal. Em meados de 6 meses nunca tive nenhum problema.

Tanto gravo cd... qto dvd...

Quem quiser me contacte pelo msn.

msn: thiago@amenezes.com.br


Mahdak
   - 20 jan 2006


Citação:
Mahdak,

Use o código assim:

#Código

Memo1.Lines.Add(´Copiando o arquivo para o Cd...´); 
NewFileName := ExtractFilePath(Application.ExeName);
CopyFile(PChar(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´, DRIVE_CDROM+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´),True);
Memo1.Lines.Add(´Backup realizado com sucesso...´);



E não esqueça que para funcionar o InCD precisa ser um CD-RW formatado (pelo InCD).

Espero ter ajudado.

[]´s.


cristian, desse jeito ai nao deu nao. o problema com a conversao de variavel é só com o ´DRIVE_CDROM´ entao tentei o seguinte:

#Código

CopyFile(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´, PChar(DRIVE_CDROM+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´)),True);


e mesmo assim houve erro na conversao:

[Error] Unit_Bkp.pas(97): Incompatible types: ´String´ and ´PAnsiChar´

como eu poderia converter essa String em PAnsiChar??


Mahdak
   - 20 jan 2006


Citação:
Eu faço a cópia através do incd e o winzip, basta apenas uma única linha
If RadioGroup1.ItemIndex = 0 then
Caminho := ´D:\´
Else If RadioGroup1.ItemIndex = 1 then
Caminho := ´E:\´
Else If RadioGroup1.ItemIndex = 2 then
Caminho := ´F:\´
Else If RadioGroup1.ItemIndex = 3 then
Caminho := ´G:\´
Else If RadioGroup1.ItemIndex = 4 then
Caminho := ´H:\´
Else
Caminho := ´I:\´;
Dia := Copy(DateToStr(Date),1,2);
Caminho := Caminho + Dia +´\´;
If not DirectoryExists(Caminho) then
If not CreateDir(Caminho) then
Raise Exception(´Não foi possível criar o diretório ´ + Caminho);
If DirectoryExists(Caminho) then
Begin
Caminho := Caminho + ´NomeDoArquivoDeBackup´;
WinExec(PChar(´C:\Arquivos de Programas\WinZip\WinZip32 -min -a -p ´´+Caminho+´´ ´+ ´´´ + ´*.*´+ ´´´),1);
End;


edilcimar, explica essa linha por favor que ficou meio confuso:

WinExec(PChar(´C:\Arquivos de Programas\WinZip\WinZip32 -min -a -p ´´+Caminho+´´ ´+ ´´´ + ´*.*´+ ´´´),1);

abraços...


Edilcimar
   - 20 jan 2006

eu peguei uma variável chamada caminho, tipo string e fui incrementando a mesma, primeiro ela é a letra onde está o cd, depois ela passa a ser a letra do cd + o dia do mes, e depois é verificado se o diretório existe, se não existir então é criado depois é acrescentado o nome do arquivo de backup e finalmente, na linha onde perguntou é utilizado o winexec(), onde estão colocados o diretório padrão onde é instalado o winzip com os comandos para criação do arquivo (-min, -a, -p), a variável caminho, e que é para copiar todos os arquivos (*.*). O incd eu uso para formatar um cd-rw.


Mahdak
   - 20 jan 2006


Citação:
eu peguei uma variável chamada caminho, tipo string e fui incrementando a mesma, primeiro ela é a letra onde está o cd, depois ela passa a ser a letra do cd + o dia do mes, e depois é verificado se o diretório existe, se não existir então é criado depois é acrescentado o nome do arquivo de backup e finalmente, na linha onde perguntou é utilizado o winexec(), onde estão colocados o diretório padrão onde é instalado o winzip com os comandos para criação do arquivo (-min, -a, -p), a variável caminho, e que é para copiar todos os arquivos (*.*). O incd eu uso para formatar um cd-rw.



Edilcimar, gostei da sua idéia, ela eh simples e direta, porem enfrento mais um probleminha...
no código abaixo eu fasso:
1. primeiro compacto o banco com o Zip master
2. depois mando copiar para um Cd formatado com o InCd 4 da maneira que voce sugeriu...

- O problema é que ele cria a pasta no cd faz o backup no hd como eu determinei, porem nao copia o backup do HD para a pasta criada no cd...

#Código


procedure TBackup.Iniciar_BackupClick(Sender: TObject);
var caminho, dia, NewFileName : string;
sl: TStringList; //compactação do arquivo
begin
If RadioGroup1.ItemIndex = 0 then
Caminho := ´D:\´
Else If RadioGroup1.ItemIndex = 1 then
Caminho := ´E:\´
Else If RadioGroup1.ItemIndex = 2 then
Caminho := ´F:\´
Else If RadioGroup1.ItemIndex = 3 then
Caminho := ´G:\´
Else If RadioGroup1.ItemIndex = 4 then
Caminho := ´H:\´
Else
Caminho := ´I:\´;
Dia := Copy(DateToStr(Date),1,2);
Caminho := Caminho + Dia +´\´;
If not DirectoryExists(Caminho) then
If not CreateDir(Caminho) then
Raise Exception(´Não foi possível criar o diretório ´ + Caminho);
If DirectoryExists(Caminho) then

Begin
Memo1.Lines.Clear;
Memo1.Lines.Add(´Compactando o arquivo...´);
if not assigned(fzip) then
begin
sl := TStringList.Create;
NewFileName := ExtractFilePath(Application.ExeName);
try
sl.Add(NewFileName+´\ADM.FDB´);
fzip := TZipThread.Create(´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´,sl,Memo1,false);
finally
sl.Free;
end;
Memo1.Lines.Add(´Arquivo Compactado...´);
end;

Memo1.Lines.Add(´Copiando arquivo(s) para o CD...´);
NewFileName := ExtractFilePath(Application.ExeName)+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´;
Caminho := Caminho + NewFileName;
WinExec(PChar(Caminho),1);
Memo1.Lines.Add(´backup realizado com sucesso!´);
End;
end;



Edilcimar
   - 20 jan 2006

Eu não faça o backup e depois copio para o cd, eu já faço o backup direto no cd dentro do diretório do dia do mês!
Eu não conheço o zip master, portanto não posso opinar na maneira de utilizá-lo, mas se quer criar o backup no hd e depois enviá-lo para o cd vc vai ter um problema pois o zipador pode estar criando o backup e então o comando de copiar o arquivo para o cd pode não funcionar pois o mesmo ainda não existe


Lindomar.des
   - 21 jan 2006

mahdak,

vou tentar descrever como faço o backup no meu sistema.

1-tenho um prog. q fica rodando em background, tb tem um trayicon.
2-configuro o programa p/ fazer backup de tempos em tempos - atualmente uso 120 minudos (2 em 2 horas)
3-primeiro faço o backup utilizando o comp. da paleta Interbase Admin :
TIBBackupService.
4-Depois desse backup realizado compacto o arquivo GBK gerado para
diminuir ainda mais o tam. do arquivo. Tb utilizo o zipmaster para
compactar. Só para ter uma ideia um arq. de 650MB cai +- p/ 35/40MB
5-toda essa operação faço no HD. Meu programa tem opção para fazer
backup em 2 locais. Qdo o cliente de gravador, que é altamente recomendado, configuro um backup no HD e outro no CD.
6-depois de feito o backup no HD apenas copio o arq. gerado p/ o CD.
Dessa forma fica uma operação mais rápida. Lembrando que a copia
para o CD só é realizada após o término do backup no HD.

como ficaria meio confuso postar todo o código aki no fórum se quiser posso enviar p/ vc dar uma olhada.


Mahdak
   - 22 jan 2006


Citação:
mahdak,

vou tentar descrever como faço o backup no meu sistema.

1-tenho um prog. q fica rodando em background, tb tem um trayicon.
2-configuro o programa p/ fazer backup de tempos em tempos - atualmente uso 120 minudos (2 em 2 horas)
3-primeiro faço o backup utilizando o comp. da paleta Interbase Admin :
TIBBackupService.
4-Depois desse backup realizado compacto o arquivo GBK gerado para
diminuir ainda mais o tam. do arquivo. Tb utilizo o zipmaster para
compactar. Só para ter uma ideia um arq. de 650MB cai +- p/ 35/40MB
5-toda essa operação faço no HD. Meu programa tem opção para fazer
backup em 2 locais. Qdo o cliente de gravador, que é altamente recomendado, configuro um backup no HD e outro no CD.
6-depois de feito o backup no HD apenas copio o arq. gerado p/ o CD.
Dessa forma fica uma operação mais rápida. Lembrando que a copia
para o CD só é realizada após o término do backup no HD.

como ficaria meio confuso postar todo o código aki no fórum se quiser posso enviar p/ vc dar uma olhada.



claro que quero lindomar... manda pro meu email: jpxst@hotmail.com

Abração!!


Alcantarus
   - 23 jan 2006


Citação:
Caros colegas. estou precisando fazer uma rotina para realizar backup em cd.
dei uma procurada no forum e vi um post bem legal:

http://forum.clubedelphi.net/viewtopic.php?t=50462&highlight=backup

- ai fala algo sobre usar o InCD. Entao o que fiz foi o seguinte:

1. instalei o InCd 4

2. criei um código para compactar meu banco e em seguida copia-lo para o Cd.

- O problema é que o sistema nao copia para o CD. vou colar o código aqui e quem puder me auxiliar na questão agradeço

uses
ShellApi

#Código



procedure TBackup.IniciarBackupClick(Sender: TObject);
var
sl: TStringList; //compactação do arquivo
NewFileName: string; //compactação do arquivo
Dados: TSHFileOpStruct; // copia do arquivo para cd

begin

Memo1.Lines.Add(´Compactando o arquivo...´);
if not assigned(fzip) then
begin
sl := TStringList.Create;
NewFileName := ExtractFilePath(Application.ExeName);
try
sl.Add(NewFileName+´\ADM.FDB´);
fzip := TZipThread.Create(´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´,sl,Memo1,false);
finally
sl.Free;
end;
Memo1.Lines.Add(´Arquivo Compactado...´);
end;

Memo1.Lines.Add(´Copiando o arquivo para o Cd...´);
FillChar(Dados,SizeOf(Dados), 0);
with Dados do
begin
NewFileName := ExtractFilePath(Application.ExeName);
wFunc := FO_COPY;
pFrom := PChar(NewFileName+´\´+´Backup - ´+FormatDateTime(´dd"_"mm"_"yyy´,Date)+´.zip´);
pTo := PChar(DRIVE_CDROM);
fFlags:= FOF_ALLOWUNDO;
end;
SHFileOperation(Dados);
Memo1.Lines.Add(´Backup realizado com sucesso...´);


end;




Caro Amigo,

Tenho uma rotina qual utilizo um batch (.BAT) e depois chamo esse (.EXE), para meu uso, esta funcionando perfeitamente, pois utilizo tb o inCD, formato um CD-RW e depois gravo utilizando essa rotina abaixo:

PS: Eu utilizo um (.INI) para pegar as configuracoes de qual pasta eu pego o backup e em qual gravadora eu devo gravar.

#Código


program Hashing;

{$APPTYPE CONSOLE}

uses
SysUtils, Windows, IniFiles;

var
sData : string[08];
sHora : string[04];
sOrigem, sDestino : string;
sDrive : string[03];
Inove : TIniFile;

begin
Inove := TIniFile.Create(ExtractFilePath(ParamStr(0)) + ´Inove.Ini´);

sDrive := Inove.ReadString(´CONFIG´, ´DRIVE´, ´´);
sOrigem := Inove.ReadString(´CONFIG´, ´PATH´, ´´);

ShortDateFormat := ´DD/MM/YYYY´;
sData := Copy(DateToStr(Date),1,2) + Copy(DateToStr(Date),4,2) + Copy(DateToStr(Date),7,4);
sHora := Copy(TimeToStr(Time),1,2) + Copy(TimeToStr(Time),4,2);

sDestino := sDrive + sData + sHora;

WriteLn(Chr(218) + ´ ´ + Chr(254) + ´ Sobre o Hashing ----------------------------------------------------------´ + Chr(191));
WriteLn(Chr(179) + ´ Desenvolvido por Inove Tecnologia ´ + Chr(179));
WriteLn(Chr(192) + ´-----------------------------------------------------------------------------´ + Chr(217));

if (not DirectoryExists(sDestino)) then
begin
WriteLn(´Criando Pasta para Back-Up...´);
CreateDir(sDestino);
WriteLn(´Copiando Backup para Pasta ´ + sDestino + ´! Aguarde...´);
CopyFile(PChar(sOrigem + ´\TLCOPIA.ARJ´),PChar(sDestino + ´\TLCOPIA.ARJ´),FALSE);
WriteLn(´Processo de Back-Up concluido com sucesso!´);
end
else
begin
WriteLn(´Erro! Impossivel continuar com a acao.´);
WriteLn(´Possiveis causas:´);
WriteLn(´1. A Pasta e o Back-Up ja estao gravados no CD-RW;´);
WriteLn(´2. Ja atingiu a capacidade total de gravacao no CD-RW;´);
WriteLn(´3. O CD-RW nao esta formatado com o inCD para executar essa acao;´);
end;
Inove.Free;
end.


Abraços,


Alcantarus