Plantage du moteur JET

SERTNM Messages postés 3 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 19 juillet 2006 - 18 juil. 2006 à 16:14
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 19 juil. 2006 à 10:35
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 juil. 2006 à 19:43
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 :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 juil. 2006 à 20:12
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++
0
SERTNM Messages postés 3 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 19 juillet 2006
19 juil. 2006 à 09:12
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);
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 juil. 2006 à 10:35
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++
0
Rejoignez-nous