Plantage du moteur JET

Signaler
Messages postés
3
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
19 juillet 2006
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour,
Je suis en train de développer un soft de traitement d'images avec visual C++ 6.0. Ce soft enregistre ses résultats dans une base de donnée Access 97 ( 1 à 10 enregistrements par seconde ).
La base de donnée était pilotée dans un premier temps par les drivers ODBC. Au bout de quelques heures voire quelques jours mon soft plante : un des thread que je ne métrise pas (un des thread du moteur JET je pense) reste en mode Wait paralysant toute mon application.
J'ai pensé résoudre mon problème en abandonnant les driver ODBC et en utilisant la technologie DAO des MFC, mais il n'en est rien...
Je viens également de me rendre compte que par moment mes enregistrements sont mélangés : j'utilise une clé primaire incrémentée automatiquement et pourtant quand je réouvre ma base avec Access on passe par exemple de l'enregistrement 120 à 128, les enregistrements 121 à 127 se trouvant entre les enregistrements 133 et 134 !!!

est ce que ce mélange des enregistrements est normal sous Access ?
est ce que certain ont déjà rencontré ce type de plantage du moteur JET ? (si c'est bien de lui dont il sagit...)
est ce que les 2 problèmes sont liés ?

Un grand merci à ceux qui vont me lire jusqu'au bout !!!

4 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Ben j'y connais rien au lib de base de données, mais je vois pas le
soucis (meme si ca peut paraitre étonnant) qu'il enregistre pas tout a
fait dans l'ordre, tant que les données sont corrects :)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Quasi assuré que l'erreur ne vient pas de Jet, j'ai du soft qiu tourne dessus depuis plusieurs années sans aucun problème avec une cadence d'enregistrement injectés et extraits nettement supérieure.

Il faut te méfier de ce que tu vois dans Access, il y a toujours un tri sur colonne même si on ne le spécifie pas.
Pour être certain de l'ordre des enregs, ouvre un recordset en mode adCmdTable sans tri, puis liste les enregs et ainsi tu sauras.

ciao...
BruNews, MVP VC++
Messages postés
3
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
19 juillet 2006

En fait ma formation de base c'est le traitement d'images.... les bases de données j'y viens parce que j'ai pas le choix, je suis totalement novice !!! d'ou ma question : qu'est ce que tu entend par

ouvre un recordset en mode adCmdTable sans tri, puis liste les enregs

comment je m'y prend ?

pour info voilà la partie de mon code qui semble poser soucis... si quelqu'un voie une erreur là dedans j'en serai ravi

PS : la base de donnée est une CDaoDatabase et est déclaré en global. Elle est ouverte une fois pour toute au début du programme.
       le recordset est un CDaoRecorset lui aussi déclaré en global et initialisé une fois pour toute au début.

    COleVariant varInt, varDbl, varL, varC;
    varInt.vt = VT_I2;
    varDbl.vt = VT_R8;
    varL.vt = VT_I4;
    varC.vt = VT_I1;

    g_mutex.Lock();
    g_pRecordset->Open(AFX_DAO_USE_DEFAULT_TYPE,
                       "SELECT * FROM Images", dbAppendOnly/*0*/);

    if(g_pRecordset->CanAppend())
    {
        g_pRecordset->AddNew();

        g_pRecordset->SetFieldValue("Chemin",LPCTSTR(cheminIm));
       
        g_pRecordset->SetFieldValue( "Date",LPCTSTR(date.Format("%d/%m/%Y %H:%M:%S")) );
       
        varL.lVal=SettingID;
        g_pRecordset->SetFieldValue("ReglageID",varL);
       
        varL.lVal=nMoule;
        g_pRecordset->SetFieldValue("Moule",varL);
       
        etc......
       
         g_pRecordset->Update();
    }

    g_pRecordset->Close();
    g_mutex.Unlock();
    Sleep(0);
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Désolé mais je n'utilise pas MFC ni aucune autre surcouche.
Exemples ici:
ODBC CONNEXION MDB ET CREATION TABLE (WIN32)
http://www.cppfrance.com/code.aspx?ID=27746
ADO GESTION FILMS(2) (WIN32)
http://www.cppfrance.com/code.aspx?id=18942
ADO GESTION FILMS(1) (WIN32)
http://www.cppfrance.com/code.aspx?id=18733
ADO : LECTURE DANS TABLEAU (WIN32)
http://www.cppfrance.com/code.aspx?id=23130
ADO: MDB VERS TXT STRUCTURE PAR TAB (WIN32)
http://www.cppfrance.com/code.aspx?id=11201

On ne devrait plus utiliser DAO depuis 1998, date à laquelle MS a prévenu que DAO était abandonné au profit de ADO.
Plus aucune mise à jour ni portage en 64 bits.

ciao...
BruNews, MVP VC++