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

C++ Discussion :

Petit problème d'héritage.


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut Petit problème d'héritage.
    Bonjour,

    J'ai une fenêtre avec un bouton, qui quand j'appuis dessus se connecte a la base de données, si la connection est ok, j'affiche donc l'autre fenêtre sinon nan.
    Si ok, une nouvelle fene^tre s'affiche et me propose 2 choix, ajouter un champ ou en supprimer un de la base de données via 2 boutons qui eux-même vont donner 2 fenêtres, pour les 2 choix.

    Pour l'ajout et la suppresion, il faut donc que je soit connecter a la base de données. Il faut donc que je récupère la conenction qui s'est faite das la première fenêtre, ses attributs etc...

    Pour cela, je vais utiliser l'héritage, mais je ne vois pas trop comment faire.
    Car, dans les 2 autres fenêtres, les méthodes sont ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void SupprimerDlg::OnBnClickedOk()
    Donc, comment faire pour que dans les 2 autres fenêtres, je puisse utiliser un attribut que je déclare dans le fichier header de la première fenêtre ?

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    Pour faire simple:
    Je te conseil plustôt une composition avec un objet gérant les accès à ta base de données. Te le passe de fenêtre en fenêtre lors de la création.

    Pour faire compliquer (Un basouka ) :
    Voir le modèle de design pattern MVC (Modèle Vue Controleur).

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut
    Et quand à la méthode simple, comment faire pour faire une composition ?

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    L'héritage est un lien fort entre deux classes qui suppose donc un certain nombre de règle. On ne peut pas hériter pour bénéficier des attributs de la classe de base. D'autant, qu'un héritage de type ne construit pas de lien entres des instances.

    La composition consiste simplement à sortir la gestion de la connexion à la base de donnée dans une classe dédiée et de proposer une association entre des instances de cette classes et celles d'autres classes en ayant besoin.

    Ce serait alors quelque chose comme ça :
    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
     
    class connection
    {// gère la connexion à la base
    public:
     connection(); // ouvre la connexion
      ~connection(); // ferme la connexion
    // et quelque part une politique de copie : 
    private :
       connection(connection const&);
       connection& operator=(connection const&);
    };
     
    class ma_fenetre
    {
    public:
       ma_fenetre(std::shared_ptr<connection> connection_):ma_connection(connection_)
    {}
    private:
       std::weak_ptr<connection> ma_connection;
    };
    Pour le MVC, ce n'est pas si compliqué et ton code devrait plus ou moins finir par ressembler à quelque chose d'avoisinant si chacune de tes classes n'a qu'un et un seul rôle bien identifié.

  5. #5
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    Hors Sujet:
    3D Archi Savez vous ou je pourrait trouver une documentation concernant std::shared_ptr et std::weak_ptr ?
    Je ne connait pas c'est nouveau élément de la STL.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut
    Désolé, mais je ne comprends pas très bien les lignes avec std::weak_ptr.
    Je cherche juste a pouvoir utiliser un attribut d'une autre fenêtre, qui me sert dans mes requêtes sql.

  7. #7
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Kalite> Documentation de boost, mais les pointeurs standard sont pareil.
    http://www.boost.org/doc/libs/1_48_0...shared_ptr.htm
    http://www.boost.org/doc/libs/1_48_0...r/weak_ptr.htm

  8. #8
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    Citation Envoyé par tifil Voir le message
    Désolé, mais je ne comprends pas très bien les lignes avec std::weak_ptr.
    Je cherche juste a pouvoir utiliser un attribut d'une autre fenêtre, qui me sert dans mes requêtes sql.
    Ah je vois que je suis pas seul.

    Sinon tu peut les remplacer par des pointeurs ou des références traditionnel.

    Merci Ekleog, je vai regarder.

  9. #9
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Kalite Voir le message
    Hors Sujet:
    3D Archi Savez vous ou je pourrait trouver une documentation concernant std::shared_ptr et std::weak_ptr ?
    Je ne connait pas c'est nouveau élément de la STL.
    J'ai écrit un tuto dessus : http://loic-joly.developpez.com/tuto...mart-pointers/
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut
    J'ai lu le tuto, mais je ne comprends toujours pas très bien.
    Si je vous passe la partie de mon code concernée, pourrez-vius e dire directement dessus ???

  11. #11
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    Poste mais le but c'est pas qu'on fasse t'on travaille. Mais que tu comprenne ce que tu doit faire.

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut
    Voici donc la partie de mon code concernée.

    Le fichier .cpp de la fenêtre où je me connecte, et si la connexion est o, j'entre dans la fenêtre qui me propose le choix, ajouter ou supprimer un champ de la table.

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    // parkingDlg.cpp : fichier d'implémentation
    //
     
    #include "stdafx.h"
    #include "parking.h"
    #include "parkingDlg.h"
    #include "CAxisCameraControl.h"
    #include "EditionDlg.h"
     
    #include <iostream>
    #include <sstream>
     
    extern "C" 
    {
        #include "C:\Program Files\MySQL\MySQL Server 5.5\include\mysql.h"
     
    }
    #pragma comment(lib, "libmySQL.lib")
     
     
    #define host "localhost"
    #define username "root"
    #define password ""
    #define database "parking"
    using namespace std;
     
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
     
     
     
     
    // boîte de dialogue CAboutDlg utilisée pour la boîte de dialogue 'À propos de' pour votre application
     
    class CAboutDlg : public CDialog
    {
    public:
    	CAboutDlg();
     
    // Données de boîte de dialogue
    	enum { IDD = IDD_ABOUTBOX };
     
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge de DDX/DDV
     
    // Implémentation
    protected:
    	DECLARE_MESSAGE_MAP()
    };
     
    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
    }
     
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
     
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    END_MESSAGE_MAP()
     
     
    // boîte de dialogue CparkingDlg
     
     
     
     
    CparkingDlg::CparkingDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CparkingDlg::IDD, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
     
    void CparkingDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Control( pDX, IDC_CAMIMAGE1, m_camera);
    }
     
    BEGIN_MESSAGE_MAP(CparkingDlg, CDialog)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    	ON_BN_CLICKED(IDC_HAUT, &CparkingDlg::OnBnClickedHaut)
    	ON_BN_CLICKED(IDC_GAUCHE, &CparkingDlg::OnBnClickedGauche)
    	ON_BN_CLICKED(IDC_BAS, &CparkingDlg::OnBnClickedBas)
    	ON_BN_CLICKED(IDC_DROITE, &CparkingDlg::OnBnClickedDroite)
    	ON_BN_CLICKED(IDC_AVANT, &CparkingDlg::OnBnClickedAvant)
    	ON_BN_CLICKED(IDC_ARRIERE, &CparkingDlg::OnBnClickedArriere)
    	ON_BN_CLICKED(IDC_EDITION, &CparkingDlg::OnBnClickedEdition)
    END_MESSAGE_MAP()
     
     
    // gestionnaires de messages pour CparkingDlg
     
    BOOL CparkingDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
     
    	// Ajouter l'élément de menu "À propos de..." au menu Système.
     
    	// IDM_ABOUTBOX doit se trouver dans la plage des commandes système.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
     
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
     
    	// Définir l'icône de cette boîte de dialogue. L'infrastructure effectue cela automatiquement
    	//  lorsque la fenêtre principale de l'application n'est pas une boîte de dialogue
    	SetIcon(m_hIcon, TRUE);			// Définir une grande icône
    	SetIcon(m_hIcon, FALSE);		// Définir une petite icône
     
    	// TODO : ajoutez ici une initialisation supplémentaire
    	this->SetVideo();
    	this->SetPTZ();
     
    	return TRUE;  // retourne TRUE, sauf si vous avez défini le focus sur un contrôle
    }
     
    void CparkingDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialog::OnSysCommand(nID, lParam);
    	}
    }
     
    // Si vous ajoutez un bouton Réduire à votre boîte de dialogue, vous devez utiliser le code ci-dessous
    //  pour dessiner l'icône. Pour les applications MFC utilisant le modèle Document/Vue,
    //  cela est fait automatiquement par l'infrastructure.
     
    void CparkingDlg::OnPaint()
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // contexte de périphérique pour la peinture
     
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
     
    		// Centrer l'icône dans le rectangle client
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
     
    		// Dessiner l'icône
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialog::OnPaint();
    	}
    }
     
    // Le système appelle cette fonction pour obtenir le curseur à afficher lorsque l'utilisateur fait glisser
    //  la fenêtre réduite.
    HCURSOR CparkingDlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
     
     
     
    void CparkingDlg::OnBnClickedEdition()
    {
     
    	// TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
     
    	conn_tout = mysql_init(NULL);
    	if (mysql_real_connect(conn_tout, host, username, password, database, 0, NULL, 0) != NULL)
    	{
     
    	MessageBox("Connexions réussie");
    	EditionDlg dlg;
    	dlg.DoModal();
     
    	}
     
    	else
    	{
    		MessageBox("Connexion échouée");
     
    	}
     
     
    }
    Voici maintenant le code de la fenêtre qui me propose les 2 choix:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    // EditionDlg.cpp*: fichier d'implémentation
    //
     
    #include "stdafx.h"
    #include "parking.h"
    #include "EditionDlg.h"
    #include "AjouterDlg.h"
    #include "SupprimerDlg.h"
     
    MYSQL* conn_tout;
    // Boîte de dialogue EditionDlg
     
    IMPLEMENT_DYNAMIC(EditionDlg, CDialog)
     
    EditionDlg::EditionDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(EditionDlg::IDD, pParent)
    {
     
    }
     
    EditionDlg::~EditionDlg()
    {
    }
     
    void EditionDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
     
     
    BEGIN_MESSAGE_MAP(EditionDlg, CDialog)
    	ON_BN_CLICKED(IDOK, &EditionDlg::OnBnClickedOk)
    	ON_BN_CLICKED(IDC_AJOUTER, &EditionDlg::OnBnClickedAjouter)
    	ON_BN_CLICKED(IDC_SUPPRIMER, &EditionDlg::OnBnClickedSupprimer)
    END_MESSAGE_MAP()
     
     
    // Gestionnaires de messages de EditionDlg
     
    void EditionDlg::OnBnClickedOk()
    {
    	// TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
    	OnOK();
    }
     
     
     
    void EditionDlg::OnBnClickedAjouter()
    {
    	// TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
    	AjouterDlg dlg2;
    	dlg2.DoModal();
    }
     
    void EditionDlg::OnBnClickedSupprimer()
    {
    	// TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
    	SupprimerDlg dlg2();
    	dlg2.DoModal();
    }
    Voici le code qui me permet de supprimer:
    Le fichier .cpp:


    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    // SupprimerDlg.cpp*: fichier d'implémentation
    //
     
    #include "stdafx.h"
    #include "parking.h"
    #include "SupprimerDlg.h"
    #include "parkingDlg.h"
    #include "EditionDlg.h"
     
    #include <iostream>
    #include <sstream>
     
    extern "C" 
    {
        #include "C:\Program Files\MySQL\MySQL Server 5.5\include\mysql.h"
     
    }
    #pragma comment(lib, "libmySQL.lib")
     
     
    #define host "localhost"
    #define username "root"
    #define password ""
    #define database "parking"
    using namespace std;
     
     
     
    // Boîte de dialogue SupprimerDlg
     
    IMPLEMENT_DYNAMIC(SupprimerDlg, CDialog)
     
    SupprimerDlg::SupprimerDlg(MYSQL* conn2, CWnd* pParent /*=NULL*/):CDialog(SupprimerDlg::IDD, pParent)
    	, nom_suppr(_T(""))
     
    {
    #ifndef _WIN32_WCE
    	EnableActiveAccessibility();
    #endif
     
    }
     
    SupprimerDlg::~SupprimerDlg()
    {
    }
     
    void SupprimerDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_EDIT1_SUPPR, nom_suppr);
    }
     
     
    BEGIN_MESSAGE_MAP(SupprimerDlg, CDialog)
    	//ON_BN_CLICKED(IDC_BUTTON1_SUPPR, &SupprimerDlg::OnBnClickedButton1Suppr)
    	ON_BN_CLICKED(IDC_BUTTON2_Connecter, &SupprimerDlg::OnBnClickedButton2Connecter)
    	ON_BN_CLICKED(IDOK, &SupprimerDlg::OnBnClickedOk)
    END_MESSAGE_MAP()
     
     
    // Gestionnaires de messages de SupprimerDlg
     
     
     
    void SupprimerDlg::OnBnClickedOk()
    {
    	// TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
    	char query2[1024];
    	UpdateData (TRUE);
     
     
    sprintf (query2, "DELETE FROM cadres WHERE prenom='%s'", nom_suppr);
     
     
     
    	mysql_query(conn_tout,query2);
     
     
    	OnOK();
    }
    Le fichier .h:

    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
    #pragma once
    #include "afxwin.h"
    extern "C" 
    {
        #include "C:\Program Files\MySQL\MySQL Server 5.5\include\mysql.h"
     
    }
    #pragma comment(lib, "libmySQL.lib")
     
    // Boîte de dialogue SupprimerDlg
     
    class SupprimerDlg : public CDialog
    {
    	DECLARE_DYNAMIC(SupprimerDlg)
     
    public:
     
    	SupprimerDlg(CWnd* pParent = NULL);   // constructeur standard
    	virtual ~SupprimerDlg();
     
    // Données de boîte de dialogue
    	enum { IDD = IDD_DIALOG1_SUPPRIMER };
     
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // Prise en charge de DDX/DDV
     
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg void OnBnClickedButton1Suppr();
    	afx_msg void OnBnClickedButton2Connecter();
    	CString nom_suppr;
    	afx_msg void OnBnClickedOk();
    };

    Donc, petit récapitulatif, dans les autre fenêtres j'ai besoin d'utiliser conn_tout, que j'initalise dans la première fenêtre, là où je me connecte à la base de données, via ceci: MYSQL *conn_tout;, dans le .h de cette même fenêtre.

    Je cherche donc à pouvoir l'utiliser dans les autres fenêtres, que je dois utiliser via cette ligne: mysql_query(conn_tout,query2);, qui sert a éxécuter la requête.

  13. #13
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    Bon alors, tu fait une classe qui gèrer l'ensemble des appels (encapsule) vers ta base de données MySQL.
    exemple
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class MySQLConnexion
    {
    private:
        conn_tout; // Je ne connait pas le type.
    public:
        MySQLConnexion()
        ~MySQLConnexion()
     
        bool Connect(const std::string& strHost, const std::string& strUser
                          const std::string& strPassword, const std::string& strDataBase);
        bool Query(const std::string& strQuery);
    };
    (Adapte cette exemple a tes besoins qui devrait être proche)
    Ensuite, dans chaque constructeur de fenêtre tu te passe cette objet.

    Schématiquement:
    Construction dans CparkingDlg::OnBnClickedEdition()
    Passage a EditionDlg qui le passe à AjouterDlg et SupprimerDlg.

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut
    J'ai créer cette classe.

    Mais, ce qui me permet de me connecter, je le fait via la méthode d'un bouton, et non pas une méthode que je met dans la classe.
    Je ne peut passer d'autres paramètres au constructeur de ma fenêtre, sinon des erreurs s'en suivent.
    Et quand dans cette classe, je déclare MYSQL *conn_tout;, il me dis quand je l'utilise, qu'il n'est pas déclaré, donc, comment faire l'utiliser depuis la classe ?

  15. #15
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    Citation Envoyé par tifil Voir le message
    J'ai créer cette classe.

    Mais, ce qui me permet de me connecter, je le fait via la méthode d'un bouton, et non pas une méthode que je met dans la classe.
    Dans la méthode du bouton tu appel la méthode de connexion de la classe MySQLConnexion.

    Citation Envoyé par tifil Voir le message
    Je ne peut passer d'autres paramètres au constructeur de ma fenêtre, sinon des erreurs s'en suivent.
    Quel erreur ?
    Ah tu déclaré le nouveau paramètre dans le constructeur de tes dialogues suivantes ?
    Citation Envoyé par tifil Voir le message
    Et quand dans cette classe, je déclare MYSQL *conn_tout;, il me dis quand je l'utilise, qu'il n'est pas déclaré, donc, comment faire l'utiliser depuis la classe ?
    Euh, ça serait bien que tu regarde du coté de l'include correspondant.

    Bon sinon, avant toute chose. Je pense que tu a besoin de prendre un bon cours de Programmation Orienté Objet et de C++. Car ce qui te pose problème ici, ce sont des basiques. ah moins que je ne m'exprime mal.
    Tu peut trouver des cours sur ce site ou d'autre il y en a plein.

  16. #16
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut
    J'ai créer la classe qui permet de se connecter, et ça se connecte bien, quand je fait appel a la fonction.

    Je passe en paramètre du constructeur de la fenêtre, voici la ligne de code correspondante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SupprimerDlg(MySQL *conn_tout, CWnd* pParent = NULL);
    Voici les erreurs que j'ai:

    >c:\users\stefan\desktop\projet\parking - copie\parking\parking\supprimerdlg.h(18) : error C2061: erreur de syntaxe*: identificateur 'MySQL'
    1>c:\users\stefan\desktop\projet\parking - copie\parking\parking\supprimerdlg.cpp(21) : error C2511: 'SupprimerDlg::SupprimerDlg(CWnd *)'*: impossible de trouver la fonction membre surchargée dans 'SupprimerDlg'
    1> c:\users\stefan\desktop\projet\parking - copie\parking\parking\supprimerdlg.h(12)*: voir la déclaration de 'SupprimerDlg'
    1>c:\users\stefan\desktop\projet\parking - copie\parking\parking\supprimerdlg.cpp(74) : fatal error C1004: fin de fichier inattendue rencontrée

    L'erreur numéro 2, correspond a ce bout de code-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SupprimerDlg::SupprimerDlg(CWnd* pParent /*=NULL*/)
    	:CDialog(SupprimerDlg::IDD, pParent)
    	, nom_suppr(_T(""))
    L'erreur se situe au niveau de la ligne 2.

  17. #17
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    Euh juste un truc lit vraiment un cours de C++. SVP

    T'aurais pas oublier de faire un include (ou une forward déclaration) pour la classe MySQL dans le "supprimerdlg.h" ?
    Tu prototype un constructeur dans le fichier .h et tu en déclare un autre. Faut que les deux constructeur ait la même signature (paramètres).

    Pour la dernière erreur, tu va à la fin de ton fichier. Tu saute deux trois ligne, tu les effaces et tu sauvegarde.

  18. #18
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut
    Merci pour la réponse.

    Mais ça ne marche pas, ça se connecte bien, mais quand je suis dans ma fenêtre de suppression, et que je rentre la valeur, ça ne supprime pas dansla base de donnée.
    Donc, là je ne vois pas du tout quoi faire.

  19. #19
    Membre éclairé
    Avatar de Kalite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    Poste le code où tu fait la suppression.

  20. #20
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut
    C'est bon, j'ai trouvé comment résoudre mon problème.
    Merci encore pour ta patience.

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

Discussions similaires

  1. Petit Problème d'héritage?
    Par Enjaye dans le forum C++
    Réponses: 9
    Dernier message: 14/11/2012, 14h48
  2. Petit problème d'héritage
    Par ohichamo dans le forum C++
    Réponses: 3
    Dernier message: 04/07/2012, 10h21
  3. Petit problème d'héritage
    Par AF_2.8 dans le forum C++
    Réponses: 4
    Dernier message: 02/12/2010, 16h33
  4. Héritage : petit problème
    Par Fy_Hertz dans le forum C++
    Réponses: 20
    Dernier message: 31/01/2006, 08h39
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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