Bonjour
j'essaie de stocker des donne en cache avec IbClientDataSet

j'ai un bouton ou je creer en cache mes données via une requete SQL venant de FireBird

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
if( IbSgbd->IBClientDataSet->Fields->FindField("ds_id")==NULL)
// if(IbSgbd->IBClientDataSet->FieldList->Find("ds_id")==NULL)
{
 //creation d'un champ de type integer
 
 IbSgbd->IBClientDataSet->FieldDefs->Add("ds_id",ftInteger,0);
 IbSgbd->IBClientDataSet->CreateDataSet();
}
de meme j'ai essaye comme cela sans succes

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
TField* pField= NULL;
       pField=IbSgbd->IBClientDataSet->Fields->FindField("ds_id");
 
 
        if(pField==NULL )
       // if(IbSgbd->IBClientDataSet->FieldList->Find("ds_id")==NULL)
        {
        IbSgbd->IBClientDataSet->FieldDefs->Add("ds_id",ftInteger,0);
        IbSgbd->IBClientDataSet->CreateDataSet();
        }


lorsque je clique sur la premiere fois sur le bouton je rentre dans le test normal pour moi

lorsque je relique une seconde fois je rentre dans le test de nouveau
et j'ai l'exception lancée "un champ ds_id existe déjà"

J'ai regarde l'aide sur ces méthodes Find et FindField elle renvoie null lorsque le champ n'est pas trouvée .

Je pourrais utiliser le méthode RecordCount mais cela ne me conviens pas
Qui aurait une idée pour "betonner " mon test ?


merci d'aider un debutant