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 :

[MFC][ODBC][Débutant] CRecordView constructor


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut [MFC][ODBC][Débutant] CRecordView constructor
    Bonjour,

    Je commence dans la gestion de base de données avec VS 2003....(c'est un projet SDI appelé 'DataBase', avec une base mySQL)
    J'ai regardé dans la FAQ VS C++ et j'ai presque réussi a tout bien compiler mais il me reste une erreur :

    DataBaseView.cpp
    c:\Documents and Settings\Tom\Bureau\Vivien\DataBase\DataBaseView.cpp(29) : error C2512: 'CRecordView' : aucun constructeur par défaut approprié disponible
    Voici mon .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class CDataBaseView : public CRecordView
    {
    protected: // création à partir de la sérialisation uniquement
    	CDataBaseView();
    	DECLARE_DYNCREATE(CDataBaseView)
    et voici mon .cpp ou est referencée l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CDataBaseView::CDataBaseView()
    {
    	EnableActiveAccessibility();
    	// TODO : ajoutez ici le code d'une construction
     
    }
    ne connaissant pas trop comment est faite la classe CRecordView, je n'arrive pas a résoudre ce problème.

    Merci d'avance.

    Cheper

  2. #2
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    essaye dans DataBaseView.h...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Salut matazz,

    En effet, l'erreur n'apparait plus après l'include.

    Mais j'en ai une nouvelle (enfin 2) :
    DataBaseView.obj : error LNK2001: symbole externe non résolu "public: virtual class CRecordset * __thiscall CDataBaseView::OnGetRecordset(void)" (?OnGetRecordset@CDataBaseView@@UAEPAVCRecordset@@XZ)
    Debug/DataBase.exe : fatal error LNK1120: 1 externes non résolus
    Entre temps j'ai changé le constructeur dans DataBaseView.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CDataBaseView::CDataBaseView() : CRecordView (IDD_FORMVIEW)
    {
    }
    J'ai trouvé ce constructeur dans la MSDN.....

  4. #4
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    je te conseille un rebuild All.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Il m'apparait les memes erreurs en faisant un rebuild all............

  6. #6
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    Citation Envoyé par lastcheper
    ...

    DataBaseView.obj : error LNK2001: symbole externe non résolu "public: virtual class CRecordset * __thiscall CDataBaseView::OnGetRecordset(void)" (?OnGetRecordset@CDataBaseView@@UAEPAVCRecordset@@XZ)
    Debug/DataBase.exe : fatal error LNK1120: 1 externes non résolus
    Je pense que comme OnGetRecordset est virtual tu doit la redéfinir dans ta classe fille.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Cette fonction je la définie dans le DataBaseView.h :
    public:
    virtual CRecordset* OnGetRecordset();
    Mais je ne la redéfinie pas dans le .cpp.....
    Et je sais pas comment la redéfinir.....
    Qu'est-ce que je peux mettre dans le corps de la fonction ?

  8. #8
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    ben tu doit retourner un pointeur sur le CRecordset de ta classe...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Ca marche.....
    Mais le debugger me trouve 2 erreurs et je ne suis pas très fort pour débugger.
    Les 2 erreur se trouvent dans objcore.cpp a la ligne 39 et 41 :
    la ligne 39 :
    BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
    {
    ASSERT(this != NULL);
    .....}
    la ligne 41 : (dans le corps de la fonction du dessus, la ligne d'après)
    ASSERT(AfxIsValidAddress(this, sizeof(CObject)));

  10. #10
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    ben visiblement ça vient de ASSERT mais c'est étonnant.
    ASSERT est défini dans Je pense plus que cela vient d'un problème d'include de Ou l'as tu rajouté DataBaseView.h ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    J'ai rajouté l'include dans l'entête de DataBaseView.h.....
    // DataBaseView.h : interface de la classe CDataBaseView
    //

    #include <afxdb.h>

    #pragma once

    class CDataBaseSet;

    class CDataBaseView : public CRecordView
    {

  12. #12
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // DataBaseView.h : interface de la classe CDataBaseView
    //
     
     
    #pragma once
     
    #include <afxdb.h>
     
    class CDataBaseSet;
     
    class CDataBaseView : public CRecordView
    {
    et si ça marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // DataBaseView.h : interface de la classe CDataBaseView
    //
     
     
    #pragma once
    #include <afx.h>
    #include <afxdb.h>
     
    class CDataBaseSet;
     
    class CDataBaseView : public CRecordView
    {
    mais c'est bizarre...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Ca donne la meme chose......

    Désolé de t'embéter comme ca mais tu a l'air d'être le seul a repondre à des questions sur les DB....

  14. #14
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    si y a un assert, c'est que ca doit venir d'autre chose ; comme un pointeur pas correct.

    Je n'ai jamais fait ca, mais es-tu sur que ta surcharge renvoit quelque chose de correct ?

  15. #15
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    ben je t'avoue que je sais pas pourquoi ça compile pas....

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    En effet, j'ai oublié de casté mon CDataBaseSet* m_pSet en CRecordset*
    Mais c'est toujours pareil......Ca lance le débugger au memes endroits.

    Voici le code de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CRecordset* CDataBaseView::OnGetRecordset() {
    	return (CRecordset*)m_pSet;
    }

  17. #17
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    c'est pas que ca compile pas, c'est une erreur d'execution semble-t-il

    moi je m'interroge sur la validité du m_pSet

    Citation Envoyé par msdn
    You must override this member function to construct or obtain a recordset object and return a pointer to it. If you declare your record view class with ClassWizard, the wizard writes a default override for you. ClassWizard's default implementation returns the recordset pointer stored in the record view if one exists. If not, it constructs a recordset object of the type you specified with ClassWizard and calls its Open member function to open the table or run the query, and then returns a pointer to the object.
    Pourquoi tu n'as pas laissé classwizard le faire pour toi ?

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Parce que sous VS 2003 il n'y a pas de class Wizzard !
    J'aurai bien voulu moi.....

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Salut,

    Je viens de faire un nouveau projet et cette fois aucun problème.....
    Pour celui-ci j'ai juste eu a lier mes contrôles aux champs de la base de données.
    Ca devais être l'autre qui a bugger a sa création.......
    Désolé du dérangement c'était la première fois que je faisait un projet Base de Données alors je pensais que c'était normal...

    Merci beaucoup matazz et nico-pyright(c) pour votre attention.

    Cheper

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

Discussions similaires

  1. Probleme MFC - ODBC
    Par Kassar dans le forum MFC
    Réponses: 3
    Dernier message: 26/05/2008, 09h00
  2. Connexion à une bdd (odbc) (débutant)
    Par majong dans le forum C++
    Réponses: 0
    Dernier message: 17/02/2008, 19h46
  3. [MFC+ ODBC] Help Required PLz
    Par torNAdE dans le forum MFC
    Réponses: 6
    Dernier message: 12/04/2006, 15h37
  4. [MFC] [ODBC] Pb copie de base de donnée..
    Par matth2602 dans le forum MFC
    Réponses: 3
    Dernier message: 17/01/2006, 13h20
  5. [ODBC][Débutant] Database::Open()
    Par lastcheper dans le forum MFC
    Réponses: 17
    Dernier message: 26/08/2005, 15h00

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