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 :
Dont les entrées sont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function VerifPresenceChamps(Liste: TStrings; Table: Variant; NbCol: Byte): Boolean;
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
Et la question ?
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;
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.![]()
Partager