Programmer la sauvegarde de base de données à partir d'une application installé

greenpeace2012 - 9 janv. 2013 à 15:06
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 13 janv. 2013 à 22:00
j'ai développé une applicat avec delphi5, mais je veux intégrer une ligne dans mon programme pour pouvoir sauvegarder la base de données, une fois l'applicat insatllée sur un autre pc (aprés génération du .EXE). merci d'avance !

6 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
9 janv. 2013 à 16:00
Bonjour,

Je suppose que tu souhaites sauvegarder la base de données avant démarrage des saisies..
Si c'est bien le souci, il suffit de lancer une procédure
de copie de fichier d'un dossier A vers un dossier B.

soit de manière automatique (à chaque ouverture de l'appli)
soit à la demande

je peux te fournir un exemple de code.

cantador
0
greenpeace2012
12 janv. 2013 à 21:30
oui, c'est trés gentil à vous !
moi, ce que je veux, c'est que lorsq j'installerai mon application sur le pc de mon client (acquéreur de l'applicat.) il lui sera possible de sauvegarder sa saisie (bdd) ! pour une éventuelle panne du pc !!! merci !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 janv. 2013 à 17:17
Bonjour,

oui, je vois..
En fait, il faudrait placer la base sur un serveur et bénéficier de cette façon des sauvegardes automatiques.
On peut aussi déclencher des sauvegardes à date fixe en se servant très simplement des taches windows ou à la demande (et à chaud)
en plaçant un bouton dans le programme déclenchant la sauvegarde :


procedure CopyFile(const FileName, DestName: string);
var
  CopyBuffer: Pointer; { buffer for copying }
  BytesCopied: Longint;
  Source, Dest: Integer; { handles }
  Len: Integer;
  Destination: TFileName; { holder for expanded destination name }
const
  ChunkSize: Longint = 8192; { copy in 8K chunks }
begin
  Destination := ExpandFileName(DestName); { expand the destination path }
  if HasAttr(Destination, faDirectory) then { if destination is a directory... }
  begin
    Len := Length(Destination);
    if Destination[Len] = '\' then
      Destination := Destination + ExtractFileName(FileName) { ...clone file name }
    else
      Destination := Destination + '\' + ExtractFileName(FileName); { ...clone file name }
  end;
  GetMem(CopyBuffer, ChunkSize); { allocate the buffer }
  try
    Source := FileOpen(FileName, fmShareDenyWrite); { open source file }
    if Source < 0 then
      raise
        EFOpenError.CreateFmt(SFOpenError, [FileName]);
    try
      Dest := FileCreate(Destination); { create output file; overwrite existing }
      if Dest < 0 then
        raise
          EFCreateError.CreateFmt(SFCreateError, [Destination]);
      try
        repeat
          BytesCopied := FileRead(Source, CopyBuffer^, ChunkSize); { read chunk }
          if BytesCopied > 0 then { if we read anything... }
            FileWrite(Dest, CopyBuffer^, BytesCopied); { ...write chunk }
        until
          BytesCopied < ChunkSize; { until we run out of chunks }
      finally
        FileClose(Dest); { close the destination file }
      end;
    finally
      FileClose(Source); { close the source file }
    end;
  finally
    FreeMem(CopyBuffer, ChunkSize); { free the buffer }
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CopyFile('c:\MyDatabase\MyBase.fdb', 'c:\Sauvegarde\');
end;



cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 janv. 2013 à 17:34
autre solution possible en servant de l'api ShFileOperation :


procedure copier(Handle: HWND; Source, Cible: string; FlagsOptions: FILEOP_FLAGS);
var
  lpFileOp: TSHFileOpStructA;
  TabFrom: array[0..255] of char;
  i: integer;
begin
  for i := 0 to length(Source) - 1 do TabFrom[i] := Source[i + 1];
  TabFrom[length(Source)] := #0;
  TabFrom[length(Source) + 1] := #0;
  lpFileOp.Wnd := handle;
  lpFileOp.wFunc := FO_COPY;
  lpFileOp.pFrom := TabFrom;
  lpFileOp.pTo := PAnsiChar(Cible);
  lpFileOp.fFlags := FlagsOptions;
  SHFileOperation(lpFileOp);
end;


le FlagsOptions permet en autre de faire apparaître une barre de progression

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
greenpeace2012
13 janv. 2013 à 20:13
merci à vs, cé tré gentil ! j'espère vs etre utile un jr ! slt...
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 janv. 2013 à 22:00
j'espère vs etre utile un jr !

moi aussi..


cantador
0
Rejoignez-nous