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 :

[Visual C++] Probl�me ADO Access violation


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Avatar de irnbru
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par d�faut [R�solu] [Visual C++] Probl�me ADO Access violation
    Bonjour j'ai un probl�me �pineux mais certainement possible � r�soudre. voil� j'ai une classe "Database" qui permet d'ouvrir une base de donn�e, des tables de manipuler tout cela etc voil� le code

    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
     
    bool Database::Open(char* UserName, char* Pwd,char* CnnStr)
    {
    	try
    	{
    		HRESULT hr;
    		hr    = m_Cnn.CreateInstance( __uuidof( ADODB::Connection ) );
    		m_Cnn->Open(CnnStr, UserName, Pwd, NULL);
    	}
     
    	CATCHERROR(m_Cnn,0)
     
    	sprintf(m_ErrStr,"Success");
    	return 1;
    }
     
    bool Database::OpenTbl(int Mode, char* CmdStr, Table &Tbl)
    {
    	if(m_Cnn==NULL)
    	{
    		Tbl.m_Rec=NULL;
    		sprintf(m_ErrStr,"Invalid Connection");
    		return 0;
    	}
    	RecPtr t_Rec=NULL;
    	try
    	{
     
    		t_Rec.CreateInstance( __uuidof( ADODB::Recordset ) );
    		t_Rec->Open(CmdStr,_variant_t((IDispatch *) m_Cnn, true),ADODB::adOpenStatic,ADODB::adLockOptimistic,Mode);
    	}
     
    	CATCHERROR(Tbl.m_Rec,0)
     
    	Tbl.m_Rec=t_Rec;
    	sprintf(m_ErrStr,"Success");
    	return 1;
    }
    bool Database::Close()
    {
     
    	if(m_Cnn==NULL)
     
    		return 0;
     
    	try
    	{
    		m_Cnn->Close();
    		m_Cnn=NULL;
     
    	}
    	catch(_com_error &e)
    	{
    		return 0;
    	}
    	return 1;
    }
    et la partie importante code client

    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
    if(! db.Open("","", AllAql.szDBFile))
    				{
    					ioError << "Erreur ACCESS : " << db.m_ErrStr << endl ;
    					bContinue = FALSE ;
    				}
    				else
    				{
     
     
     
    					if(! db.OpenTbl(ADODB::adCmdTable, "OPTIMISATION", tblOptimisation))
    					{
    						ioError << "Erreur ACCESS : Impossible d'accéder à la table OPTIMISATION" << endl ;
    						bContinue = FALSE ;
    					}
     
    					db.Close();
    					return 1;
     
    }
    }
    Cela plante avec le message d'erreur suivant :

    Unhandled exception in AASeq.exe (MSDART.Dll) : 0xC0000005 : access violation

    par contre si je met db.close; return 1 ; avant l'ouverture d'une table cela ferme bien.

    Quelqu'un peut m'aider?
    merci!

    IRNBRU

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    bonjour,
    Peut etre une aide pour toi,
    si ton CDatabase db, est declar� comme �a c'est une variable, et il ne peut ouvrir qu'une seule table en meme temps donc forcement fermer la table active avant d'en ouvrir un autre.
    Si tu le declare en CDatabase *db, tu cree un pointeur, des que ta besoin d'acceder a une de tes base avec le new tu cree un nouvelle objet que tu d�truit a la fin par un free.

  3. #3
    Membre �clair�
    Avatar de irnbru
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par d�faut
    Merci pour ton aide ricky78 mais cela n'�tait pas la solution pr�cisement. Il fallait tout simplement mieux nettoyer les objets, notamment les objets pour acc�der aux tables. Sinon ton id�e �tait bonne du point de vue g�n�ral � savoir bien s'assurer que les objets sont lib�r�s.

    Il fallait etre sur que ces pointeur

    ADODB::_ConnectionPtr
    ADODB::_RecordsetPtr

    appelent la m�thode Close puis les mettre � null!

    Si cela interesse certaines personnes je peux mettre le code � disposition.
    Ouf c'�tait chaud � r�soudre �tant donn� que je suis totalement d�butant en C++ et c'�tait pas mon code aussi!

    IRNBRU

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me d'access violation.
    Par 6-MarViN dans le forum Langage
    R�ponses: 1
    Dernier message: 14/11/2012, 16h15
  2. Probl�me d'Access Violation avec lfind
    Par beegees dans le forum C
    R�ponses: 4
    Dernier message: 22/01/2008, 15h00
  3. R�ponses: 22
    Dernier message: 28/11/2007, 20h39
  4. Probl�me ADO - excel - access
    Par Margoulin79 dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 04/06/2007, 13h35
  5. Probl�me Access Violation dans une classe
    Par randriano dans le forum C++Builder
    R�ponses: 1
    Dernier message: 11/04/2007, 18h49

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