Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1705 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  ODBC, SQLDisconnect, COM

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ODBC, SQLDisconnect, COM

n°402569
seblamb
Posté le 21-05-2003 à 12:44:57  profilanswer
 

J'ai un objet COM qui a comme membre un objet static  
Cet objet static initialise une connection ODBC vers une base Access.
Quand le programme appellant l'objet COM se décharge de la memoire, le destructeur de l'objet static est appelé.
Ca c'est normal ( et voulu )
Par contre quand le descructeur appel la fonction SQLDisconnect, windows ferme violemment le programme en indiquand "L'inscruxction xxxx a tenté d'utiliser l'adresse mémoire xxx qui ne peut être read..."
 
Par contre si je l'objet en question n'est plus static il n'y a plus de problème.
 
Sachant que tout ceci fait parti d'un programme particulièrement mal conçu et que la seul façon de débuger est de faire des fichiers de trace, si quelqu'un avait déja rencontré un problème similaire...

mood
Publicité
Posté le 21-05-2003 à 12:44:57  profilanswer
 

n°402714
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 21-05-2003 à 14:16:02  profilanswer
 

A l'intuition :  
 
(Si l'objet est en statique => plantage) et (l'objet pas statique => OK)
 
je me demande s'il n'y pas 2 tentatives d'appel de SQLDisconnect donc ma question est :  
 
Crées-tu 2 instances de ton objet COM ? (qui partagerait donc la même variable de classe)
 
2 solutions:
* variable pas statique
* variable remise à NULL après un appel conditionnel à SQLDisconnect si la variable n'est pas NULL.
 
 
 
 


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°402741
seblamb
Posté le 21-05-2003 à 14:28:07  profilanswer
 

Merci pour ton aide mais visiblement j'ai pas été très clair :
je resume, j'ai cela
 
class MonODBC
{
 MonODBC()
 ~MonODBC(){ ::SQLDisconnect(...);}
};
 
class MonCOM
{
 static MonODBC mODBC;  
};
 
Le problème arrive au moment ou le programme utilisant un objet de type MonCOM se décharge de la mémoire ( après la fin du main)
A ce momentle destructeur de mODBC est applelé ( normal ) et plantage lors de l'appel à SQLDisconnect.
 
SQLDisconnect ( fonction de lAPI ODBC qui prend un pointeur)  
n'est appelée q'une seule fois ( je trace les appels ) et de toute façon d'après la doc elle est capable de retourner une erreur en cas de pointeur invalide
 
mODBC étant un objet il ne peut pas être NULL.


Message édité par seblamb le 21-05-2003 à 14:28:33
n°402760
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 21-05-2003 à 14:39:48  profilanswer
 

seblamb a écrit :

Merci pour ton aide mais visiblement j'ai pas été très clair :
je resume, j'ai cela
[...]


 
Ah ok, c'est plus subtil... :/
Alors, autre hypothèse : Est-ce qu'il y a des threads dans l'histoire ?


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°402790
seblamb
Posté le 21-05-2003 à 14:48:51  profilanswer
 

Le problème se produit avec ou sans thread, c'est quoi l'idée ?

n°402818
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 21-05-2003 à 14:56:45  profilanswer
 

seblamb a écrit :

Le problème se produit avec ou sans thread, c'est quoi l'idée ?


 
Ben je ne sais pas. Le SQLDisconnect prend un certain temps donc si l'objet est libéré paralellement dans un autre thread, l'instruction juste après le SQLDisconnect peut être indéfinie.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°403893
seblamb
Posté le 22-05-2003 à 10:49:45  profilanswer
 

Bon ben j'ai trouvé une solution pour résoudre ce problème : virer Access  :bounce: , car visiblement sous SQL Server ce problème ne se pose pas.
Donc la solution c'est MSDE ( un SQL Server light)
 
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  ODBC, SQLDisconnect, COM

 

Sujets relatifs
connectivité avec COMConnexion ODBC access
odbc vers MysqlLien ODBC avec Delphi
[.NET][COM/CORBA]Interragir avec des machines Linux[Microsoft][Pilote ODBC Microsoft Access] Mise à jour impossible.
read port COM non bloquant sous win :-( comment faire ?Question sur la fonction php : odbc_result
par rapport a directX, c quoi "COM" ?MySQL et ODBC..... Gros problème !
Plus de sujets relatifs à : ODBC, SQLDisconnect, COM


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)