Bonjour,

dans un programme qui me sert à faire des backups d'une base de données firebird je procéde de la manière suivante pour vérifier quel est le dernier backup présent sur le disque dans le répertoire de sauvegarde
Pour explication le répertoire = CheminAlias
le nom du backup = AliasName

ce qui donne quelque chose comme ceci dans le répertoire
base_2017_06.fbk
base_2017_06_02.fbk
base_2017_06_03.fbk
base_2017_06_04.fbk
base_2017_06_05.fbk
...
en fin de mois (ou plutôt début du suivant) les fichiers du aaaa_mm_jj seront effacés N.B. je travaille à une suppression moins "agressive" qui garderai quand même n jours selon la date


pour rechercher quel est la date du dernier backup j'utilise ce code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
function TDatasBackup.GetDernierBackup(AliasName : String): TDateTime;
var info : TSearchRec;
begin
result:=0;
 { Recherche de la premiére entrée du répertoire }
if FindFirst(CheminAlias+AliasName+'_*.fbk',faAnyFile,Info)=0 then
begin
  repeat
    { uniquement les fichiers}
    if (Info.Attr And faDirectory)=0
      then begin
         if info.TimeStamp>result then
           result:=info.TimeStamp;
       end;
    { Il faut ensuite rechercher l'entrée suivante }
  until FindNext(Info)<>0;
  {libérer les ressources de la recherche }
  FindClose(Info);
end;
end;
Perso je ne vois pas ce qui pourrait clocher avec cette recherche pourtant j'ai un problème avec un utilisateur qui me dit qu'il n'a pas de fichiers fbk

L'exploitation de cette date se retrouve dans la partie principale de mon programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    // récupération du dernier backup
    // YMB est un integer, YM aussi 
       
    DecodeDate(Date,aa,mm,jj);
    YM:=aa*100+mm;
    
    DLB:=GetDernierBackup(Sections[i]);
    if Trunc(DLB)=0
       then YMB:=0
       else begin
         DecodeDate(GetDernierBackup(Sections[i]),baa,bmm,bjj);
         YMB:=baa*100+bmm;
       end;

    DebutDeMois:=YM>YMB;
    if DebutDeMois then DoFindeMois(Sections[i],DLB);  // ce pourait-il qu'il y ait un problème possible ici ? 
    
    if not FileExists(GetBackupName(Sections[i],Date)) then // en théorie si debut de mois getbackupname est sous la forme nom_An_mois, sinon nom_an_mois_jour
    begin
     FDIBBackup1.DriverLink := FDPhysFBDriverLink1;
     FDIBBackup1.UserName := F.ReadString(Sections[i],'User','SYSDBA');
     FDIBBackup1.Password := DecodePWD(F.ReadString(Sections[i],'Password',''),Sections[i]);
     FDIBBackup1.Host := '127.0.0.1';
     FDIBBackup1.Protocol := ipTCPIP;
     FDIBBackup1.Database := F.ReadString(Sections[i],'DataBase','');
     FDIBBackup1.BackupFiles.Text:=GetBackupName(Sections[i],Date);
     FDIBBackup1.Backup;
     level:=0;
    end
    else level:=1;

    // par la suite il y a un nbackup, les nbackups existent (ou du moins sont fait selon RDB$BACKUP_HISTORY)
procédures d'effacement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
procedure TDatasBackup.DoFindeMois(AliasName : String; DateFin: TDateTime);
begin
DoEffacer(Format('%s_%s-*.fbk',[AliasName,FormatDateTime('yyyy-mm',DateFin)]));
end;
 
procedure TDatasBackup.DoEffacer(Fichiers : String);
var info : TSearchRec;
begin
if FindFirst(CheminAlias+Fichiers,faAnyFile,Info)=0 then
begin
  repeat
    if (Info.Attr And faDirectory)=0
      then DeleteFile(CheminAlias+info.Name);   // todo moins agressif en fin de mois 
  until FindNext(Info)<>0;
  FindClose(Info);
end;
end;
Le pire, dés que je mets mon nez sur son pc tout se fait correctement et refonctionne son pc à peur de moi !
ou plutôt que fait-il avec ses fichiers fbk (il fait des copies sur un disque dur externe) qui empêche le bon déroulement ?

Difficile de faire un débogage sur un mois entier donc je fais appel à des yeux neufs qu'est qui pourrait clocher ?