Bonjour,

J'ai sur un form une tâche répétitive qui consiste à affecter aux items de plusieurs combobox des noms de champs de fichiers ayant été sélectionnés dans d'autre comboboxes.

J'ai donc naturellement eu envie de faire une fonction pour traiter ça, et de passer en paramètre le nom du fichier sélectionné et la boite de liste qui doit recevoir la liste des champs.

Ca donne ça:

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
void AffecteListeChampsA(AnsiString NomFichier, AnsiString BoiteListe)
{
TComboBox* Boite = new TComboBox(ReqLib);
int NbCont=ReqLib->ControlCount;
for (int i = 0;i < NbCont;i++)
   if (ReqLib->Controls[i]->Name.AnsiCompare(BoiteListe) == 0)
      Boite = (TComboBox*)ReqLib->Controls[i];
Boite->Parent=ReqLib;
 
AnsiString RequeteChps="SHOW COLUMNS FROM "+NomFichier;
ReqLib->MysqlClientDataSetFic->Close();
ReqLib->MysqlClientDataSetFic->CommandText=RequeteChps;
ReqLib->MysqlClientDataSetFic->Open();
 
int nbChps=ReqLib->MysqlClientDataSetFic->RecordCount;
if (nbChps==0)
   {
   MessageBox(NULL,"Aucun champ trouvé !","Alerte pour l'Utilisateur", MB_OK);
   ReqLib->MysqlClientDataSetFic->Close();
   }
else
   {
   while(!ReqLib->MysqlClientDataSetFic->Eof)
     {
     Boite->Items->Add(VarToStr(ReqLib->MysqlClientDataSetFic->FieldValues["FIELD"]));
     ReqLib->MysqlClientDataSetFic->Next();
     }
   }
ReqLib->MysqlClientDataSetFic->Close();
}
La compilation se passe bien, mais la boite de liste dont le nom est passé en paramètre ne se remplit pas. Du coup, je me dis que les Items vont bien dans "boite" mais disparaissent peut-être sitôt la fonction exécutée. Est-ce l'explication ? Comment peut-on y remédier d'une façon ou d'une autre pourvu que ma boîte se remplisse sur le form ?

J'ai pas mal cherché sur le net y compris le forum mais je n'ai pas trouvé de vraie méthode pour accéder directement à une combobox (et la remplir) avec une fonction.

Merci pour vos suggestions!