Bonjour,

Voila j'ulise ADO pour me connecter a une bdd Access

Donc lorque je cree un objet ADO par exemple
dans un constructeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
CBaseDeDonnee::CBaseDeDonnee()
{
          m_ADO = new ADO;
}
ensuite dans le destructeur de fais ca:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
CBaseDeDonnee::~CBaseDeDonnee()
{
          delete m_ADO;
}
En ce qui concerne le constructeur de ADO je fais rien de special si ce n'est les pointeurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
   _RecordsetPtr m_pRecord;
	_CommandPtr m_pCommand;
	_ConnectionPtr m_pConnexion;
A NULL

dans le destrcuteur je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
try
{
	// si nous sommes connectes on se deconnecte
	if (m_pConnexion != NULL) { Deconnect(); }
 
	//fermeture de la librairie COM
	CoUninitialize();
}
catch (...)
{
}
Tout ceci fonctionne sauf lorsque que je sors du destructeur (appel du delete)




PS: je rajoute le code de Deconnect()
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
31
32
33
 
//////////////////////////////////////////////////////////////////////
// Deconnexion de la base de donnee
//////////////////////////////////////////////////////////////////////
bool ADO::Deconnect()
{
	try
	{
		//fermeture du curseur (si ouvert)
		if (m_pRecord->State != adStateClosed)
			m_pRecord->Close();
 
 
		//Fermeture de la connexion (si connecte)
		if (m_pConnexion->State != adStateClosed)
			m_pConnexion->Close();
 
		m_pConnexion = NULL;
		m_pCommand = NULL;
		m_pRecord = NULL;
	}
	catch (_com_error & e)
	{
		if (cpt != 3) { cpt++; Sleep(1000); Deconnect(); }
 
		cpt = 0;
 
		m_Erreur = (LPCSTR)e.Description();
		m_Erreur = m_Erreur + "\n" + (LPCSTR)e.Source();
	}
 
	return true;
}
En esperant avoir une reponse

sur ce bonne continuation