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 :

ODBC et curseurs dynamique!!!


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut [RESOLU]ODBC et curseurs dynamique!!!
    Bonjour je veux lire un fichier excel et faire bougé mon curseur de Crecordset dans le fichier, je veux utilisé un recset.Movefirst();
    mais le try catch me renvoi une erreur me disant que mes pilote ne prenne po en compte le jeu d'enregistrement d'accepte pas les deplacements vers l'avant.

    apres j'ai fait:

    recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);

    et j'ai remplacé par
    recset.Open(CRecordset::dynamic, sSql, CRecordset::readOnly);

    et le j'ai comme message:

    Curseurs dynamiques non pris en charge par le pilote ODBC


    Merci de m'éclaircir!

  2. #2
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Salut,

    Extrait de MSDN
    CRecordset::dynamic A recordset with bi-directional scrolling. Changes made by other users to the membership, ordering, and data values are visible following a fetch operation. Note that many ODBC drivers do not support this type of recordset.
    Est-ce que ton fichier Excel est configuré comme une source de données :
    Utilise soit un snapshot ou dynaset
    Montre ton code...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut
    Avec snapshot: aucun colonne n'a été lié durant l'appel à SQLfetchscroll....
    Avec dynaset:Le gestionnaire ODBC ne prend pas en charge les feuilles de réponses dynamique!!!!!

    Voila mon code:
    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
    CDatabase database;
        CString sSql;
        CString sItem1, sItem2;
        CString sDriver;
        CString sDsn;
        CString sFile = "scenario/test.xls"; 
     
        sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", "Microsoft Excel Driver (*.xls)", sFile);
     
        TRY
        {
     
            database.Open(NULL, false, false, sDsn);
            // Allocate the recordset
            CRecordset recset(&database);
     
            sSql = "SELECT ID,Varlire, VarEcrire, EnchTempo, EnchValidation, EnchEtat, EnchCondition "       
                   "FROM tablescenario "                 
                   "ORDER BY ID";
            // Execute that query (implicitly by opening the recordset)
    		recset.Open(CRecordset::dynaset, sSql, CRecordset::readOnly);
    int incr=0;
     
    while(!recset.IsEOF())
            {
    		incr++ ;
    	recset.MoveNext();
    		}
    		UpdateData(true);
    		Totalfiche=incr;
    		UpdateData(false);
    //Remet le pointeur à l'initial
    		recset.MoveFirst();
            // Close the database
            database.Close();                      
        }
        CATCH(CDBException, e)
        {
            // A database exception occured. Pop out the details...
            AfxMessageBox("Database error: " + e->m_strError);
        }
        END_CATCH;

    Ce fichier que j'exploite à été créer avec l'ODBC!

  4. #4
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Est-ce que tu as bien écrit ta chaîne de connexion?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CString sFile = "scenario/test.xls"; 
     
        sDsn.Format("ODBC;DRIVER={%s};DSN=' ';DBQ=%s", "Microsoft Excel Driver (*.xls)", sFile);
    Voici le prototype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    virtual BOOL Open(
       LPCTSTR lpszDSN,
       BOOL bExclusive = FALSE,
       BOOL bReadOnly = FALSE,
       LPCTSTR lpszConnect = _T("ODBC;"),  // Si tu n'ajoute pas le DSN ici alors place le dans lpszDSN
       BOOL bUseCursorLib = TRUE 
    );
    Il faut d'abord vérifier si ta base de données est ouverte
    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
     
    if( !database.Open(NULL, false, false, sDsn) )
    {
         AfxMessageBox("La base de donnée n'est pas ouverte");
         return;
    } 
     
    // vérifie également pour le recordset
     recset.Open(CRecordset::dynaset, sSql, CRecordset::readOnly);
     
    if( !recset.IsOpen() )
    {
         AfxMessageBox("Le recordset n'est pas ouverte");
         return;
    }
    Avant de fermer le database ferme d'abord le recordset.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    recset.Close();
    database.Close();
    Essaie un peu ceci.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut
    Merci de ta réponse mais rien n'y fait!!! en forwardonly la lecture marche très bien mais comme j'ai besoin de faire des retour en arrière les autres méthodes me sont d'une grande utilité!
    il ya pas un moyen de réinitialisé le "pointeur " recordset pour relire le fichier! pour contourner mon PB???

  6. #6
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Biensûr en forwardonly tu ne peux aller qu'en avant.
    Mais quel est alors le problème quand tu utilises dynaset!!!
    Remontre ton code avec les nouvelles ccorrections.

    Ouvre le recordset comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    recset.Open(CRecordset::dynaset, sSql);
    Une mauvaise solution serait d'appeler à chaque fois CRecordset::Requery() pour te remettre en première position.

  7. #7
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Tu utilises directement la classe CRecordset au lieu d'une classe dérivée de CRecordset.

    Regarde cet extrait de l'MSDN.

    CDatabase::Open
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    virtual BOOL Open(
       LPCTSTR lpszDSN,
       BOOL bExclusive = FALSE,
       BOOL bReadOnly = FALSE,
       LPCTSTR lpszConnect = _T("ODBC;"),
       BOOL bUseCursorLib = TRUE 
    );
    Parameters
    ...
    bUseCursorLib
    TRUE if you want the ODBC Cursor Library DLL to be loaded. The cursor library masks some functionality of the underlying ODBC driver, effectively preventing the use of dynasets (if the driver supports them). The only cursors supported if the cursor library is loaded are static snapshots and forward-only cursors. The default value is TRUE. If you plan to create a recordset object directly from CRecordset without deriving from it, you should not load the cursor library.
    Fixe bUseCursorLib à fasle.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 21
    Par défaut
    Merci c'était vraiment tout bête avec un dynaset et le chargement de la Lib à FALSE ça marche au poil!!!!

    Milles merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PL/SQL] Curseur dynamique
    Par dcollart dans le forum Oracle
    Réponses: 2
    Dernier message: 09/11/2009, 10h08
  2. Réponses: 2
    Dernier message: 06/03/2007, 11h00
  3. [web] TK: curseur dynamique
    Par JC_007 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 30/10/2006, 14h09
  4. Curseur dynamique
    Par dcollart dans le forum Oracle
    Réponses: 1
    Dernier message: 09/05/2006, 11h06
  5. Enregistrement issu d'un curseur dynamique
    Par vanessaf22 dans le forum SQL
    Réponses: 26
    Dernier message: 15/04/2004, 13h26

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