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 :

Utilisation de CDatabase pour modifier une base de donn�es O


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    jyg
    jyg est d�connect�
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Par d�faut Utilisation de CDatabase pour modifier une base de donn�es O
    J'utilise le code suivant pour essayer d'acc�der � une base de donn�es.

    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
    #include "afxdb.h"
     
    class CRec : public CRecordset
    {
    public :
    	CRec (CDatabase*);
    	CString m_prod;
    	virtual void DoFieldExchange (CFieldExchange *pFX);
    };
     
    void main ()
    {
    int rc;
    CDatabase db;
    rc=db.OpenEx ("DRIVER=SQL Server;SERVER=NOM_ORDINATEUR;UID=sa;PWD=interstiss",0);
    printf ("OpenEx=%x\n",rc);
    CRec rec (&db);
    printf ("rec=%x\n",rec);
    rc=rec.Open (CRecordset::dynaset,"select * from [T Assemlages]",CRecordset::none);
    printf ("Open=%x\n",rc);
    rec.MoveFirst ();
    rc=rec.CanUpdate ();
    printf ("prod=%s\n",rec.m_prod);
    printf ("CanUpdate=%x\n",rc);
    rec.Edit ();
    rec.Close ();
    db.Close ();
    }
     
    CRec::CRec (CDatabase *db)
    	 :CRecordset (db)
    {
    }
    void CRec::DoFieldExchange (CFieldExchange *pFX)
    {
    CRecordset::DoFieldExchange (pFX);
    pFX->SetFieldType (CFieldExchange::outputColumn);
    RFX_Text (pFX,"Num produit",m_prod);
    }
    L'�x�cution donne le r�sultat suivant
    OpenEx=1
    rec=5530d0
    Open=1
    prod=
    CanUpdate=1

    puis le programme se plante lors de l'execution de la m�thode Edit
    dans dbcore.cpp ligne 1622 sur une instruction ASSERT (m_nFields!=0)
    en effet la valeur est n_mFields est 0.

  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
    Pourquoi tu ne demandes pas � visual studio de te g�n�rer directement un projet o� tu acc�des � une base de donn�es.

  3. #3
    jyg
    jyg est d�connect�
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Par d�faut
    Parceque je dois ins�rer cet acc�s dans une application �xistante �crite sans les Wizards et d'autre part je pr�f�re comprendre ce que je fais.

  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
    Tu ne fais pas de Update()

  5. #5
    Membre exp�riment�
    Inscrit en
    Mars 2004
    Messages
    425
    D�tails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par d�faut
    Fais Ceci
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    rc=rec.Open (CRecordset::dynamic, _T("select * from [T Assemlages]"),CRecordset::none);
    Au lieu de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    rc=rec.Open (CRecordset::dynaset,"select * from [T Assemlages]",CRecordset::none);
    A++

  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
    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
     
    if( !rec.Open (CRecordset::dynaset,"select * from [T Assemlages]",CRecordset::none) )
    {
           cerr << "Impossible d'ouvrir" << endl;
           return -1;
    }
     
    if( !rec.CanUpdate () )
    {
           cerr << "Impossible de mettre à jour ma table" << endl;
           return -1;
    } 
     
    rec.Edit ();   // prépare le tampon d'édition
    rec.m_prod = "eVC++ product";  // j'édite
    if( rec.Update() ) // je met à jours
    {
            cout << "Mise à jour réussie" << endl;
    }
    else
    {
            cerr << "eurrrr!!!!!!" << endl;
            return -1;
    }
     
    rec.Close (); // je libère l'infrastructure en terme de mémoire
    db.Close (); // je ferme la connexion à masource de données
    Gabrielly

  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
    Va aussi dans le constructeur et place m_nFields � 1

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    CRec::CRec (CDatabase *db) 
        :CRecordset (db) 
    { 
          m_nFields = 1;  // ton recordset n'utilise qu'un champ m_prod
    }
    Gabrielly

  8. #8
    jyg
    jyg est d�connect�
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Par d�faut
    J'ai rajout�
    dans le constructeur de CRec, maintenant je r�cup�re le code du premier produit et la m�thode Edit ne plante plus. Bien sur il reste la mise � jour de l'enregistrement puis l'appel d'Update pour mettre � jour la base.
    Merci � tous pour vos conseils et j'esp�re parvenir � terminer ce code sans faire appel � vos services.

  9. #9
    jyg
    jyg est d�connect�
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Par d�faut [R�solu]
    J'ai rajout� les appels � AddNew et Update, �a marche.
    Par contre pour l'�tat [R�solu] je l'ai mis dans le titre, je n'ai pas trouv� le bouton en bas � gauche de la page (voir le tutorial).
    Merci � tous, A+

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 0
    Dernier message: 04/05/2015, 16h25
  2. Utilisation de taleaux pour faire une base de donn�es
    Par zaloeil dans le forum Macros et VBA Excel
    R�ponses: 8
    Dernier message: 11/06/2014, 14h44
  3. utilisation ADO pour cr�er une Base de Donn�e vide
    Par laribi71 dans le forum VB 6 et ant�rieur
    R�ponses: 17
    Dernier message: 20/02/2008, 19h13
  4. R�ponses: 3
    Dernier message: 18/01/2008, 20h45
  5. R�ponses: 12
    Dernier message: 05/03/2007, 10h36

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