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