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 :

Multithread sur une Base Access via ODBC


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm� Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Par d�faut Multithread sur une Base Access via ODBC
    Bonjour,

    J'ai un programme avec deux threads compl�tement asynchrone.
    Tous se passe bien sauf des fois quand les 2 threads veulent avoir la main sur la base pour �criture.
    Voici l'exception qui est emise :
    Could not update; currently locked by user 'admin' on machine ' '.

    Est que quelqu'un aurait une piste pour g�rer ceci ?
    J'ai essay� de temporiser avec la fonction CRecordset.CanUpdate(), mais rien � faire. CanUpdate renvoie toujours true !

    Merci pour votre aide.

  2. #2
    Membre chevronn� Avatar de stephdim
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    462
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 462
    Par d�faut
    salut,

    tu es certainement en acc�s exclusif sur ta base de donn�es
    reverifies les param�tres d'acc�s (CDatabase :: Open ou OpenEx)

    pour un usage multithread en ODBC, je te conseille d'avoir un objet CDatabase distinct par thread, qui pointe sur la meme base ... pour �viter tout soucis, d� � la synchro ... sinon �a fonctionne bien en multithread

    @+

  3. #3
    Membre confirm� Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Par d�faut
    Bonsoir,

    Merci d'avoir r�pondu.
    En fait j'ai bien deux CDatabase. Au moment de l'initialisation, chaque Thread instancie bien son propre objet CDatabase.

    A l'initialisation :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CDatabase dbth1;
     
    if(dbth1.OpenEx(_T(ConString),CDatabase::noOdbcDialog) == 1)
     Flag_Database_Open = true;
    else
     Flag_Database_Open = false;
     
    ....
     
    //idem pour la deuxième connexion.
    De plus chaque thread est dans une classe diff�rente.

    Je ne comprends pas alors pourquoi il y a un conflit ?

    Voila comment je mets � jours les entr�es dans la table :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    CString strSQL3 = "SELECT * FROM " + DB_TABLE + " WHERE " + DB_F_ID + " = " + szId;
     
    SvcDb rs3(&dbth1); // SvcDb étant une classe genérée par le wizard
    rs3.Open(CRecordset::dynaset,strSQL3);
    rs3.Edit();
    ......
    Merci d'avance pour vos pistes.

  4. #4
    Membre chevronn� Avatar de stephdim
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    462
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 462
    Par d�faut
    tes requetes, fais les plutot comme �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    SvcDb rs3(&dbth1); // SvcDb étant une classe genérée par le wizard
    rs3.m_strFilter.Format(_T("%s=%s"),DB_F_ID,szId);
    rs3.Open();
    si DB_F_ID est une d�finition constante

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    #define DB_F_ID "champ"
    ...
    rs3.m_strFilter.Format(_T(DB_F_ID) _T("=%s"),szId);
    sinon je vois pas d'erreur dans le code que tu montres.
    quel est le driver ODBC utilis� ? supporte - t 'il l'acc�s concurrentiel ?

    @+

  5. #5
    Membre confirm� Avatar de jagboys
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    166
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 166
    Par d�faut Cdatabase access odbc
    Bonjour,

    Merci beaucoup pour tes pr�cieux conseils. Je vais les appliquer.

    Comment trouver la version des pilotes obdc ?

    Ce que je vois en faisant ODBCAD32.EXE puis onglets PILOTES :

    Microsoft Access Driver (*.mdb) version : 4.00.6305.00

    Est ce que cel� est suffisant ?

    Merci d'avance.

  6. #6
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    Tu utilises access comme base de donn�es. Je pense que ton probl�me viens de l� car access n'est pas suppos� �tre une base de donn�e en acc�s partag�.
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre chevronn� Avatar de stephdim
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    462
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 462
    Par d�faut
    Je pense que ton probl�me viens de l� car access n'est pas suppos� �tre une base de donn�e en acc�s partag�.
    si �a fonctionne avec access, on peut meme choisir le mode partag� ou exclusif dans les options de la base. C'est le cas sur Access 2002.

    @jagboys : v�rifie que cette option est bien sur mode partag�

    sinon je s�che ...


    @+
    Images attach�es Images attach�es  

Discussions similaires

  1. Connexion de Oracle XE sur une base Hyperfile via ODBC
    Par zouhenlai dans le forum Connexions aux bases de donn�es
    R�ponses: 8
    Dernier message: 13/01/2009, 19h38
  2. R�ponses: 2
    Dernier message: 06/03/2008, 14h26
  3. R�ponses: 4
    Dernier message: 15/01/2008, 16h36
  4. Acceder � une base access via visual C++
    Par faceo75 dans le forum MFC
    R�ponses: 4
    Dernier message: 07/02/2007, 16h17
  5. requetes BUSINESS OBJECT sur une base ACCESS
    Par greatmaster1971 dans le forum Deski
    R�ponses: 1
    Dernier message: 06/10/2004, 14h10

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