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 :

Mettre la valeur d'une table dans une CString


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut Mettre la valeur d'une table dans une CString
    Rebonjour tout le monde, c'est pour savoir comment je peux récupérer la valeur d'un champ d'une table d'access. Donc voici mon code pour ciblé ma donnée mais voudrait récupérer la valeur dans une CString.
    Donc voici mon code si ca peut aider:
    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
    //Définition des paramètres de la base de données
    	CDatabase database;  
    	CString sDriver = "MICROSOFT ACCESS DRIVER (*.mdb)"; 
    	CString sDsn; 
    	CString sFile = "personnel.mdb";  
     
        //Création de la connexion 
        sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile); 
     
        { 
          database.Open(NULL,false,false,sDsn);	//ouverture de la base de données
    	}
    	//ciblage de la donnée
    	CString test = "SELECT Nom FROM Employé WHERE Matricule = '99999'";
    	database.ExecuteSQL(test);
    Je vous remercie.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    Personne ne peux m'aider T_T???????

  3. #3
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Salut

    Tu dois créer un objet CRecordset qui lui est lié à une ou des table(s) de ta base de donnée.

    Gabrielly

  4. #4
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Un extrait d' MSDN

    ClassWizard: Creating a Recordset Class
    Home | Overview | How Do I | Tutorial

    This article explains how to create a recordset class with ClassWizard.

    You'll need a new CRecordset-derived class (for ODBC) or CDaoRecordset-derived class (for DAO) for each table, join of tables, or predefined query you work with in your program. Each recordset class specifies its own set of columns and may also specify parameters. For information about the structure of your recordset class and its uses, see the article Recordset: Architecture (ODBC) or DAO Recordset: Architecture.

    For information about mapping recordset field data members to columns in the table, see the article ClassWizard: Binding Recordset Fields to Table Columns.

    For information about using a CRecordset (ODBC) for a join of tables, see the article Recordset: Performing a Join (ODBC). (Performing a join with DAO is similar.)

    For information about using a CRecordset for a predefined query, see the article Recordset: Declaring a Class for a Predefined Query (ODBC). For information about predefined ("saved") queries in DAO, see the article DAO Querydef.

    Note When creating CRecordset-derived or CDaoRecordset-derived classes with ClassWizard, be careful when selecting multiple tables or queries. Selecting multiple tables or queries will result in the construction of a JOIN query without any restriction on how to perform the JOIN (called a cross product or a Cartesian product JOIN). You may wish to specify a filter using CRecordset::m_strFilter or CDaoRecordset::m_strFilter (resulting in MFC building an SQL WHERE clause) before the recordset is opened. This will constrain the number of records in the result set. This is especially necessary when using the ODBC Cursor Library, since the Cursor Library may create a large temporary file for result sets with many records.

    The table below shows the major steps in creating a recordset class.

    Recordset Class Creation Summary

    To Do this
    Create the class Use the Add Class dialog box in ClassWizard.
    Select a data source and database table for the class Select options in the Database Options dialog box. These include a data source, possibly a recordset type, and possibly some advanced options. Then specify details about the data source in the Select Database dialog box (for ODBC) or the Open dialog box (for DAO). Next, use the Select Database Tables dialog box to select tables from those available on the data source.
    Remove any column mappings you don't want. By default, AppWizard and ClassWizard bind all columns in the table to recordset field data members Select a column name on the Member Variables tab and choose Delete Variable.
    Optionally parameterize the underlying SQL statements Manually add parameter data members, or, in DAO, base your recordset on a parameterized a querydef object.
    Optionally use dialog data exchange (DDX) to map recordset data members to controls in a record view See the article Record Views.


    For more information about parameterizing your class, see the article Recordset: Parameterizing a Recordset (ODBC) or the article DAO Queries: Filtering and Parameterizing Queries. For information about using DDX between record view controls and recordset data members, see the article ClassWizard: Mapping Form Controls to Recordset Fields.
    Gabrielly

  5. #5
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Sur Visual C++.Net il y a bien un assistant qui te permet de créer des classes MFC et de sélectionner une classe de base. Si tu arrives à créer une classe à l'aide de l'assistant ça sera beaucoup plus simple car il va te générer le code nécessaire pour connecter ton recordset à une table et de définir sa fonction membre DoFieldExchange qui est responsable des échanges entre ton objet "select" ie le recorset et ta table.

    Gabrielly

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    Je suis dans l'option pour créer des classes, je peux choisir différents types de classes de base mais je ne vois pas la classe CRecordset, mais j'ai une classe de base CDatabase (création direct d'un classe MFC). L'autre possibilité est de passé par la création a partir d'une classe "consommateur odbc MFC" je créer ma classe sur une table de ma base de données, elle dérive bien de CRecordset mais lors de la compilation sans rien rajouter au code il me dit que CRecordset n'est pas connus donc c'est la ou je bloque. Merci infiniment

  7. #7
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    If faut inclure le fichier suivant dans <StdAfx.h>
    #include <afxdb.h> // MFC ODBC database classes
    Gabrielly

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    ok merci c'est passé (suis une épave) je l'avais mis que dans une seule classe!!! Donc maintenant je vais déclarer une classe pour chaque table de ma base de données!!! Thx

  9. #9
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Tu peux aussi associer plusieurs tables à un seule CRecordset. A toi de voir.

    Gabrielly

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    J'attends la suite des instructions, heureusement que t'es la!!!!

  11. #11
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Tes classes CRecordset ressmble t'elles un peu à ce 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
    class CNormVoltageSet : public CRecordset
    {
    public:
    	CNormVoltageSet(CDatabase* pDatabase = NULL);
    	DECLARE_DYNAMIC(CNormVoltageSet)
     
    // Field/Param Data
    	//{{AFX_FIELD(CNormVoltageSet, CRecordset)
    	long	m_N_;
    	double	m_Tension_nominale;  // champ de ma table
    	double	m_Tension_frequency_industrielle; // champ de ma table
    	double	m_Tension_choc_foudre; // champ de ma table
    	double	m_Tension_choc_manoeuvre; // champ de ma table
    	//}}AFX_FIELD
     
    	double m_Tension_Nominale_Param;
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CNormVoltageSet)
    	public:
    	virtual CString GetDefaultConnect();    // Default connection string
    	virtual CString GetDefaultSQL();    // Default SQL for Recordset
    	virtual void DoFieldExchange(CFieldExchange* pFX);  // RFX support
    	//}}AFX_VIRTUAL
     
    // Implementation
    #ifdef _DEBUG
    	virtual void AssertValid() const;
    	virtual void Dump(CDumpContext& dc) const;
    #endif
    };
    ie les 3 fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CNormVoltageSet)
    	public:
    	virtual CString GetDefaultConnect();    // Default connection string
    	virtual CString GetDefaultSQL();    // Default SQL for Recordset
    	virtual void DoFieldExchange(CFieldExchange* pFX);  // RFX support
    	//}}AFX_VIRTUAL
    Gabrielly

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    ouais c'est ca!!

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    je dois enchainer par quoi apres stp?

  14. #14
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    OK

    Rappelle moi est -ce une dailog-based application ou SDI ou encore MDI?

    Gabrielly

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    Mon appli est basée sur une dailog-based application !!

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    Je fais pleins de test la mais j'ai du mal avec la fonction getfieldvalue(). Pourtant j'ai fais une recherche sur le forum et j'ai repris un exemple mais ca passe pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CEmploy recup;
    recup.GetFieldValue("Nom");
    Nom est le champ de ma table Employ. Bon ba grosse galère (Lucier en mode boulet).

  17. #17
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Déclare ton Recordset dans ta dialogue.

    comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     CMyDlg: public CDialog
    {
    //...
    public:
        CMyRecordset m_Myrecord;
     
    };
    Dans OnInitDialog

    tu fais m_Myrecord.Open(); et tu affectes les champs de ta table aux variables que tu as associées aux zones d'édition.

    Gabrielly

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    oki je vais essayer de faire ca ^^!

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    arf pige pas cette fonction de merde, t'aurais pas un exemple de ton prog en que je regarde et que je l'étudie un peu STP T_T !!!

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Points : 80
    Points
    80
    Par défaut
    j'ai trouvé mais lorsque je lance l'appli il me demande ma source de données, pas d'erreurs de compilation mais une grosse erreur au niveau connection de la base de donnée. Donc un morceau de code correspondant serait super cool comme ca en plus je pourrait l'étudier sans te poser des questions qui peuvent paraitre stupides!!!

Discussions similaires

  1. Mettre la valeur d'un champ d'une table dans une variable
    Par marcelstan dans le forum Access
    Réponses: 1
    Dernier message: 18/03/2015, 20h58
  2. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  3. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  4. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  5. Réponses: 3
    Dernier message: 13/01/2009, 16h55

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