IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC] ADO et operateur delete


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Par défaut [MFC] ADO et operateur delete
    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

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut ,
    ton message correspond a une corruption de memoire sur un block memoire alloué.
    a mon avis tu as un probleme dans tes allocations / liberations memoires .
    ou iniialisations.
    trace le(s) desctructeur(s) pas a pas et verifis les valeurs de tes objets.
    voir aussi ça a tout hasard :
    http://www.developpez.net/forums/vie...675101#1675101

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Par défaut
    voila donc une fois le delete execute (message box montre precedement)
    j'ai regarde la valeur de l'objet (adresse) au debuggueur
    et j'obtiens


    Donc a priori l'objet est bien detruit et tous mes pointeurs utilises pour ADO sont = NULL

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    hum la valeur de this 0xCCCCCCCC si tu a lu mon post du post it cela correspond a une valeur non initialisée ....

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Par défaut
    Donc qui provient de ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Par défaut
    je crois avoir trouver mon probleme
    il s'agit d'un tableau de _variant_t de taille dynamique et en effet je ne faisais pas de delete juste apres.

    Maintenant mon probleme c'est que lorsque que je fais delete monvariant;

    Ca ne marche pas. (messagebox d'erreur)

    A moins qu'il y ai une facon bien particuliere pour detruire ce tableau de _variant_t ?

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    il faudrait que tu montres ton code et surtout la partie incriminée..


  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Par défaut
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    //////////////////////////////////////////////////////////////////////
    // Ecrit une valeur dans toutes les items
    //////////////////////////////////////////////////////////////////////
    bool CGroupeOPC::EcrireItem(short Valeur)
    {
    	// test si l'on dispose bien d'une référence sur l'interface IOPCAsyncIO2
    	if (!(LPUNKNOWN)m_IOPCAsyncIO2)
    	{
    		// erreur : la référence sur l'interface IOPCSyncIO n'existe pas
    		m_Erreur = 42;
    		return false;
    	}
     
    	unsigned short i;
     
    	DWORD pdwCancelID;
     
    	HRESULT hr;
    	HRESULT* pErrors = NULL;
     
    	// copie de la valeur dans un tableau de Variant
    	_variant_t * vtValue;
     
    	vtValue = new _variant_t[m_NombreItem];
     
    	for (i=0 ; i<m_NombreItem ; i++)
    	{
    		vtValue[i] = Valeur;
    	}
     
    	hr = m_IOPCAsyncIO2->Write(m_NombreItem,
    							   m_hServerItem,
    						       vtValue,
    						       m_dwConnection,
    						       &pdwCancelID,
    						       &pErrors);
     
    	delete vtValue; // plante
     
    	if (hr != S_OK)
    	{
    		// erreur : échec de la méthode write
    		m_Erreur = 43;
    		return false;
    	}
     
    	if(pErrors[0] != S_OK)
    	{
    		// erreur : impossible d'écrire l'item
    		m_Erreur = 44;
    		return false;
    	}
     
    	// Item ecrit avec succes
    	CoTaskMemFree(pErrors); // libération de la mémoire allouée par Write
     
     
    	return true;
    }
    Plante lors de l'appel " delete vtValue; "

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Par défaut
    Debuggeur avant l'appel de delete





    Debugguer apres l'appel de delete




    PS: le code poste precedement n'a aucun lien avec la CBaseDeDonnee (mais je pensais que ca venait du delete sur le _variant_t)



    Si tu veux je peux te passer mon projet concernant la base de donnee avec ADO

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Par défaut
    PROBLEME RESOLU pour le delete de la CBaseDeDonnee

    Me reste plus qu'a savori comment detruire un tableau de _variant_t

    Merci encore

Discussions similaires

  1. [MFC][ADO][ACCESS] temps de chargement très très long
    Par julien.nasser dans le forum Access
    Réponses: 2
    Dernier message: 12/05/2006, 15h34
  2. surcharge operateur delete et héritage
    Par Hervé dans le forum C++
    Réponses: 5
    Dernier message: 29/03/2006, 13h59
  3. [MFC] [CArray] Pb operateur=
    Par Yellowmat dans le forum MFC
    Réponses: 2
    Dernier message: 22/12/2005, 16h39
  4. operateur delete
    Par ep31 dans le forum C++
    Réponses: 7
    Dernier message: 24/11/2005, 00h46
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 10/06/2002, 07h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo