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
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
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; }
Cela plante avec le message d'erreur suivant :
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; } }
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
Partager