OVH Cloud OVH Cloud

BCB6TemplateModule de donneesADO

2 réponses
Avatar
Olivier
Bonjour à tous
je suis en train de creer un template afin
de savoir pour un appliq multi panneau (TPanel)
afin de savoir comment udpgrader ma base de donnee.

Pour l'instant je teste sur Accees 2000 mais par la suite cela
sera du parradox7 deBorland

voila le point H de mon template:

Code:
#ifndef TTemplateAdoSgbdH
#define TTemplateAdoSgbdH
#include "TDataModuleSgbd.h"
file://---------------------------------------------------------------------
-------//
template<class T>

class
mplateAdoSgbd{

private:

TDataModuleSgbd * _pTDataModule; // ptr sur module de donnée
AnsiString _ConnectionString;
AnsiString _SQL;
bool _Connected;

void __fastcall SetSQL(const AnsiString &SQLValue);
AnsiString __fastcall GetSQL();

void __fastcall SetConnectionString(const AnsiString &ValueConnection);
const AnsiString __fastcall GetConnectionString();

public:

__fastcall TTemplateAdoSgbd();
__fastcall ~TTemplateAdoSgbd();

bool __fastcall UpdateSgbd(T * ptr);

void __fastcall Connect();
void __fastcall Disconnect();

__property AnsiString SQL={ read=GetSQL, write=SetSQL };
__property AnsiString ConnectionString = { read=GetConnectionString, write=SetConnectionString };

};
file://---------------------------------------------------------------------------
#endif


sur le point CPP de ma classe je fais :

Code:
template<class T>__fastcall TTemplateAdoSgbd<T>::
TTemplateAdoSgbd{
_pTDataModule=new TDataModuleSgbd(_pTDataModule);
}




et dans le main je fais :
Code:
TTemplateAdoSgbd<TPanel> * p=new TTemplateAdoSgbd<TPanel>();
p->ConnectionString=MaChaine;
p->SQL=MaRequete
p->UpdateSgbd(Panel1);
delete p;


le probleme est que j'ai une violation acces sur construteur
et je vois pas comment ou est mon erreur ?

Sur la methode p->UpdateSgbd(Panel1); je compte utiliser
l'operateur TypeID est ce le bon operateur


Pourait
je faire dans le corps de cette fonction
de truc du genre if( ptr->Edit1->Text=="")
sachant que mon prototype est
Code:
template<class T> bool __fastcall TTemplateAdoSgbd<T>::UpdateSgbd(T * ptr)

si oui comment ?

merci de vos reponses ,je debute dans le template
si quelqu'un a un meilleure idée dites moi le....
_________________
Cordialement,
Sarda Olivier
_________________________________
Site Web :
http://www.membres.lycos.fr/osarda/

2 réponses

Avatar
Ambassadeur Kosh
le code des template se met dans le .h (si si, ce n'est pas du code, c'est
une definition au même titre qu'un prototype qui est utilisée pour être
"inferer" le type associé. cette façon d'implanter les templates est une
tradition en c++.

si j'ai bien compris, tu définis un template et tu veux laisser une fonction
à definir pour chaque implantation du template. pas bonne approche, ça, mon
bon monsieur.

si tu veux specifier une implantation particuliere du template (prenons par
exemple vector<bool> pour vector<T>), il te faudra declarer ta classe
completement de A a Z.

en fait, la, il te manques un objet intermediaire.

class TManipulator
{
void UpdateSgbd(Form1* ptr)
{
Edit1->....
Label2->...
}
}

template<class T> class TTemplateAdoSgbd
{

}

et apres, tu utilises un TTemplateAdoSgbd<TManipulator> ;

la, d'apres ce que je vois, tu essayes de faire une sorte d'héritage en
donnant la specif d'un côté et l'implantation de l'autre, mais ça n'est pas
comme cela qu'il faut voir le biniou. fait passer ta "variabilité" par le
parametre. l'approche specialisation de fonction membre n'existe pas (on va
dire ça comme ça).

j'espere que je t'embrouilles pas trop...
Avatar
Ambassadeur Kosh
> class TManipulator
{
void UpdateSgbd(Form1* ptr)
{
Edit1->....
Label2->...
}
}



chui con, directement, tu dotes les "objets" à mettre à jour de la méthode
(ici une TForm1, mais pourquoi pas autre chose)
et apres, roule avec un mplateAdoSgbd<Form1>.