Dans mon appli, je dois mettre à jour une Bdd sur feuille excel avec une extraction d’une autre Bdd sous forme d’une autre feuille excel.
La base de donnée originale (celle à partir de laquelle je fais des extractions) est purgée régulièrement des données que son concepteur juge périmées.
Hors mon processus intervenant « tardivement » il arrive que les données aient été purgées lorsque j’en ai besoin.
Pour palier le problème, je fais des extractions hebdomadaires.
Mais comme la base de donnée originale continue à vivre, il y a des données à mettre à jour sur ma base pour des enregistrements existants (j’espère que je suis clair jusque là !).
Les extractions étant paramétrées manuellement, lors de l’intégration dans ma base je souhaite contrôler un minimum de choses, entre autres la présence des champs nécessaires (la base de donnée originale étant composée de plus de 200 champs et je n’en ai besoin que de 22).
J’ai donc créer une fonction du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Function VerifPresenceChamps(Liste: TStrings; Table: Variant; NbCol: Byte): Boolean;
Dont les entrées sont :
un TStrings contenant la liste des champs à recevoir.
Un Variant contenant la ligne 1 de ma table excel (la liste des champs reçus)
Un byte contenant le nombre de colonnes utilisées dans la table excel en entrée
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
Function VerifPresenceChamps(Liste: TStrings; Table: Variant; NbCol: Byte): Boolean;
Var
   CptListe, CptTable : Byte;
   Trouve : Boolean;
   ChTbl, ChIEP : String;
Begin
  Trouve := False;
  For CptListe := 0 to Liste.Count -1 do
  Begin
    ChTbl := Liste.Strings[CptListe];
    For CptTable := 1 to NbCol do
    Begin
      ChIEP := VarToStr(Table[1,CptTable]);
      If AnsiPos(ChTbl, ChIEP) <> 0 then  // Chaîne trouvée
      Begin
        Trouve := True;
        Break;
      End;
      If ((CptTable = NbCol) and  (Not Trouve)) Then
      Begin
        VerifPresenceChamps := False;
        Break;
      End;
    End;
  End;
  if Trouve then VerifPresenceChamps := True;
End;
Et la question ?
J’y viens.
Ma fonction est un TOR (Tout Ou Rien) et ne me satisfait pas.
S’il manque un ou plusieurs champs elle me dit qu’il manque quelque chose mais sans préciser quoi.
Voici donc ma question :
Est t’il possible de créer dynamiquement autant de variables booléennes que nécessaire (dont le nombre est donné par Liste.count) et dans ce cas, au lieu de retourner un booléen, ma fonction renverra une liste afin de passer l’info sur ce qui manque.
Précisions complémentaires :
1-le contenu de liste est chargé depuis un fichier texte afin de palier aux variations de libellés de la base de donnée originale (je me suis déjà fais avoir) sans avoir à toucher au code.
2-Je suis quasiment débutant (mais tout le monde s’en est déjà rendu compte).
Merci.