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] Access CRecordset AddNew


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut [ODBC] Access CRecordset AddNew
    Bonsoir,

    J'essaye de faire un lien avec une base de données Access, voila la méthode utilisée pour écrire un nouvel enregistrement dans la base :

    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
    43
    44
    45
    46
    47
    48
    49
    50
     
    void CChez_CSamuel_ECNajouaDoc::dbWrite(CEmprunteur E)
    {
    	CDatabase database;
    	char chemin[MAX_PATH];
    	CString SqlString;
    	CString sNom, sPrenom;
    	CString sDriver = "MICROSOFT ACCESS DRIVER (*.mdb)";
    	CString sDsn;
    	CString sFile = CGetChemin(chemin, MAX_PATH)+"\\bd1.mdb";
    	TRACE("Chemin pour la base de données : %s \n", sFile);
    	int iRec = 0; 	
     
    	// code en provenance de codeproject.com 
    	// Build ODBC connection string
    	sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);
    	TRY
    	{
    		// Open the database
    		database.Open(NULL,false,false,sDsn);
     
    		// Allocate the recordset
    		CRecordEmprunteur recset( &database );
     
    			try
    			{
    			 recset.Open(CRecordset::dynaset,NULL, CRecordset::appendOnly) ;
    			 recset.AddNew() ;
    			 recset.m_EmprunteurName = E.getNom();
    			 recset.m_EmprunteurPrenom = E.getPrenom();
    			 recset.m_EmprunteurAdresse = E.getAdresse();
    			 recset.m_EmprunteurTelephone = E.getTelephone();
    			 recset.Update();
    			 recset.Close();
    			 database.Close();
    			}
    			catch(CDBException e)
    			{
    			 e.ReportError() ;
    			 e.Delete() ;
    			 database.Close();
    			}
    	}
    	CATCH(CDBException, e)
    	{
    		// If a database exception occured, show error msg
    		AfxMessageBox("Database error: "+e->m_strError);
    	}
    	END_CATCH;
    }
    Et voici le constructeur de ma classe dérivée de CRecordset :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CRecordEmprunteur::CRecordEmprunteur(CDatabase* pdb)
    : CRecordset(pdb)
    {
    //{{AFX_FIELD_INIT(CRecordEmprunteur)
    m_EmprunteurID=0; 
    m_EmprunteurName=_T("");
    m_EmprunteurPrenom=_T("");
    m_EmprunteurAdresse=_T("");
    m_EmprunteurTelephone=_T("");
    //}}AFX_FIELD_INIT
    m_nDefaultType = snapshot;       //  here
    }
    Lorsque j'appel cette méthode d'écriture voici le message obtenu :

    "Database error : Le gestionnaire ODBC ne prend pas en charge les feuilles de réponses dynamique"

    J'ai absolument besoin de votre aide.
    Je vous remercie des réponses que vous pourrez me fournir.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Bonjour à tous,

    Il n'y aurait pas un bon tutoriel pour réaliser un enregistrement dans une base de données ? Basé sur ce modèle c'est à dire sans passer par les éléments tout fait de MFC. Personne n'a d'idée sur le problème que je rencontre ?

    Je vous remercie pour toutes les réponses que vous pourrez m'apporter.

  3. #3
    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
    CRecordEmprunteur::CRecordEmprunteur(CDatabase* pdb)
    : CRecordset(pdb)
    {
    //{{AFX_FIELD_INIT(CRecordEmprunteur)
    m_EmprunteurID=0;
    m_EmprunteurName=_T("");
    m_EmprunteurPrenom=_T("");
    m_EmprunteurAdresse=_T("");
    m_EmprunteurTelephone=_T("");
    //}}AFX_FIELD_INIT
    m_nFields = 5; // Commence par mettre cette ligne que tu as oublié!!!
    m_nDefaultType = snapshot;
    }

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Toujours le même problème.....
    La même erreur...

    Voici ma classe dérivée de recordset :
    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
     
    class CRecordEmprunteur : public CRecordset
    {
     
    public:	
    CRecordEmprunteur(CDatabase* pDatabase = NULL);
    //DECLARE_DYNAMIC(CRecordEmprunteur);
     
    // Field/Param Data
    //{{AFX_FIELD(CRecordEmprunteur, CRecordset)
    public:
    long m_EmprunteurID;
    CString m_EmprunteurName;
    CString m_EmprunteurPrenom;
    CString m_EmprunteurAdresse;
    CString m_EmprunteurTelephone;
    //}}AFX_FIELD
     
    };

  5. #5
    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
    Si c'est toute la définition de la classe alors elle est incomplète.
    Tu devrais ajouter ces lignes si tu veux que MFC l'exécute correctement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public:
    			virtual CString GetDefaultConnect();	// Default connection string
    			virtual CString GetDefaultSQL(); 	// default SQL for Recordset
    			virtual void DoFieldExchange(CFieldExchange* pFX);	// RFX support
     
    			// Implementation
    #ifdef _DEBUG
    			virtual void AssertValid() const;
    			virtual void Dump(CDumpContext& dc) const;
    #endif

Discussions similaires

  1. [ODBC ACCESS]Formulaires
    Par Jean_Benoit dans le forum Administration
    Réponses: 4
    Dernier message: 16/01/2006, 13h25
  2. [D7]+[MapX]+[ODBC]+[ACCESS]
    Par Laurent de marseille dans le forum Bases de données
    Réponses: 10
    Dernier message: 29/06/2005, 00h01
  3. ODBC Access => Type Incompatible avec un champ DATE ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 6
    Dernier message: 23/04/2005, 02h02
  4. Réponses: 3
    Dernier message: 31/01/2005, 23h24
  5. [C++] récup BDD ODBC avec CRecordset
    Par Gothico dans le forum MFC
    Réponses: 6
    Dernier message: 27/10/2003, 11h16

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