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][D�butant] Database::Open()


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  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 [ODBC][D�butant] Database::Open()
    Bonjour,

    Je suis sous VS 2003, je viens de cr�er un projet ODBC.....
    J'eesaie de bidouiller un peu la base mais impossible de la changer avec Edit() et Update()....
    A chaque appel le d�bugger Windows intervien....

    Si vous voulez un bout de code, dites-le....

    Merci d'avance

    Cheper

  2. #2
    Membre exp�riment�
    Inscrit en
    Mars 2004
    Messages
    425
    D�tails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par d�faut
    Commences par nous envoyer le bout de code.

    Merci

  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

  4. #4
    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
    Bonjour,

    Gabrielly, je viens de lire ton tutoriel.....
    Tout d'abord, bravo, c'est tr�s bien expiqu� !
    J'ai cr�e un autre projet MFC, attach� automatiquement � une base de donn�es avec VS .NET 2003.
    J'ouvre la table avec comme type CRecordset::dynaset, mais quand j'�xecute mon appli l'erreur suivante est emise :
    Le gestionnaire ODBC ne prend pas en charge les feuilles de r�ponses dynamiques
    Si je l'ouvre avec snapshot, le message n'est pas affich� mais je peux pas me balader dans mon jeu d'enregistrement.....un autre message s'affiche :
    No cursor name available
    Je vois pas trop comment y rem�dier.

    Merci d'avance.

    PS : Si vous voulez un bout de code demandez, mais pr�ciser quel bout.... (TestBaseView.h et .cpp, TestBaseDoc.h et .cpp, TestBaseSet.h et .cpp)

  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
    Salut,

    Comment cr�es-tu ton projet?
    Si tu utilises un fichier .mdb est-il en lecture seule?
    Lorsque que tu cr�es ton projet, le choix du type du recordset se fait en cochant les options de l'assitant AppWizard (VC++ 6.0).

    Montre moi le code o� tu tentes de te connecter � la base.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par d�faut Le classwizard c'est mal
    Bonjour � tous,

    Si vous voulez mon avis, je n'utiliserais pas d'assistant et j'utiliserais simplement les m�thodes fournis par les objets CRecordset et CDatabase.

    Pour faire des modifications dans la base de donn�e, il vous suffit d'utiliser l'objet CDatabase et sa m�thode executeSQL et lui passer la requ�te SQL sous format de chaine de charact�re.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CString strCmd = "UPDATE Taxes SET Federal = 36%";
    CDatabase db;
    db.open("DSN=DATA_SOURCE");
    TRY
    { db.ExecuteSQL( strCmd ); }
    CATCH(CDBException e)
    { // The error code is in e->m_nRetCode }
    Pour rechercher un enregistrement ou se promener dans des enregistrements il suffit d'utiliser un objet CRecordset et c'est m�thodes comme IsBOF, IsEOF, MoveNext, MovePrev, MoveLast et MoveFirst. Il y a beaucoup d'autre m�thode utile dans la classe CRecordset.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CDatabase db;
    db.open("DSN=DATA_SOURCE");
    CRecordset rs(db);
    rs.Open(CRecordset::dynamic,"select * from TABLE");
    while (!rs.IsBOF() && !rs.IsEOF())
    {
       //see the data and manipulate them
       rs.MoveNext();
    }

  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
    Salut,

    Gabrielly, je cr�e mon projet sous VS .NET 2003. Je fais Fichier->Nouveau Projet->'Type de projet=Projets Visual C++'->'MFC'->'Mod�le=Applications MFC', puis OK.
    Apr�s une autre bo�te de dialogue s'ouvre :
    Dans l'onglet Type d'application je coche 'SDI'
    Dans l'onglet Prise en charge des documents compos�s je coche 'Serveur complet'
    Dans l'onglet Prise en charge des bases de donn�es je coche 'Vue avec prise en charge des fichiers' puis 'ODBC'.....et ici je choisi snapshot ou dynaset.
    Et dans le meme onglet j'appui sur le bouton source de donn�es et je choisi ma base de donn�es (de type MySQL).

    Cheper

  8. #8
    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 Philippe299,

    J'essai avec ta methode, j'ai cherch� dans la MSDN les fonctions que tu m'a cnseill�es...
    Je n'arrive pas � utiliser la fonction CDatabase::Open()...
    Voila comment je me connectais � ma base avec VS .NET 2003 automatiquement :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CString CTestBaseSet::GetDefaultConnect()
    {
    	return _T("DSN=sudev_pira;DATABASE=pira;SERVER=10.0.0.120;UID=root;PWD=zeitoon;PORT=;OPTION=8;STMT=;");
    }
     
    CString CTestBaseSet::GetDefaultSQL()
    {
    	return _T("[s_achadrlivcmde]");
    }
    Sais-tu comment convertir cela pour utiliser Open() ou OpenEx() ?

    Merci d'avance.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par d�faut Connection String
    Comme tu peux le voir dans ta m�thode GetDefaultConnect() tu as la chaine de connection � la BD qui est "DSN=sudev_pira;DATABASE=pira;SERVER=10.0.0.120;UID=root;PWD=zeitoon;PORT=;OPTION=8;STMT=;", la source de donn�e est ce qui est apr�s le �gal � l'identifiant DSN. En g�n�ral lorsque l'on cr�e une source de donn�e ODBC c'est pour une seule base de donn�e. Si ta base de donn�e est prot�g� tu dois ajouter les identifiants comme UID(Nom d'utilisateur) et PWD(mot de passe). Par contre, si ta base de donn� est situ� sur une autre machine alors tu as besoin d'ajouter � ta chaine de connection l'IP de la machine et aussi le nom de la base de donn�e.
    En r�sumer ta chaine ressemblerais � �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    CDatabase db;
    db.OpenEx("DSN=sudev_pira;DATABASE=pira;SERVER=10.0.0.120;UID=root;PWD=zeitoon;PORT=;OPTION=8;STMT=;");
    Alors bien r��cris moi si tu as besoin d'aide.

  10. #10
    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,

    J'ai fait ce que tu m'as dit de faire mais il y a toujours un rapport d'erreur de Windows qui s'ouvre et quand je lance le debugger il me dit que l'erreur est provoqu�e par l'appel de la fonction OpenEx().....
    Voici mon appel que j'ai chang� car la base de donn�es est situ�e sur mon poste :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    dB->OpenEx("DSN=sudev_pira;UID=root;PWD=zeitoon;PORT=;OPTION=8;STMT=;");
    et si j'enl�ve aussi PORT=;OPTION=8;STMT=; -> rapport de Windows....
    J'ai rev�rifi� si la base �tait en lecture seule mais non elle ne l'est pas.
    En fait ce que je ne comprends pas c'est :
    Pourquoi Windows m'affiche un rapport d'erreur et pas le compilo ??

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par d�faut Erreur de Window/Application
    Bien moi quand j'utilise la fonction OpenEx je n'ai pas de BD s�curis� par mot de passe et nom d'utilisateur. Alors je fais simplement quelque chose comme �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    CDatabase db;
    if (!db.OpenEx("DSN=BDExperience",CDatabase::openReadOnly)) cout << "Ne peu ce connecter a la BD" << endl;
    Ici ma BD est ouverte en mode de lecture seulement. Puis si je veux avoir un CRecordset je fais simplement:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    CRecordset rs(&db);	 
    CString sql = "select * from Experience";
    rs.m_strFilter = "numExperience='"+numExperience+"'";
    if (!rs.Open(CRecordset::dynaset,sql)) cout << "N'a pas plus executer la commande SQL" << endl;
    Alors bien, j'imagine que si window te fait du trouble c'est probablement c'est � cause d'un mots de passe erron� ou ton application n'a pas les droits pour acc�der � la source de donn�e. Mais bon, ton application passe par un Driver ODBC pour acc�der a la BD, alors s'il y a un erreur, c'est Window qui affiche l'erreur et pas ton application.

    Juste comme �a tu as cr�� une source de donn� ODBC sur le poste: start>setting>control panel>administrative tool>Data source. Il faut te cr�er une source de donn�e ODBC avec les outil d'administration de Windows.

  12. #12
    mat.M
    Invit�(e)
    Par d�faut Re: [ODBC][D�butant] Edit() et Update()
    Citation Envoy� par lastcheper
    Bonjour,


    A chaque appel le d�bugger Windows intervien....


    Cheper
    le debugger intervient c'est pas assez pr�cis.
    Il faut g�rer les exceptions avec Try et Catch comme dans le code de Philippe de Montr�al

  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
    Salut,

    J'ai essay� de g�rer les exceptions mais le compilo me sort une erreur.
    Voici mon code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    try {dB->OpenEx("DSN=sudev_pira;DATABASE=pira;UID=root;PWD=zeitoon;PORT=;OPTION=8;STMT=;");}
    catch (CDBException e) {
    	Trace << e.m_nRetCode << "\t" << e.m_strError << endl;
    }
    Et voici l'erreur :
    error C2316: 'CDBException' : ne peut pas �tre intercept� en tant que destructeur et/ou le constructeur de copie est inaccessible
    Je n'utilise pas souvent de try/catch, je vois pas a quoi elle correspond....

  14. #14
    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
    Je viens de t�l�charger MyODBC-3.51.11-2 j'avais la version 2.50.39.....
    Je me suis dit que c'�tais �a mais non, pas du tout....
    Ca marche toujours pas.....
    Dans Panneau de config->Outils d'administration->Sources de donn�es ODBC->Sources de donn�es utilisateur
    j'ai cr�� une nouvelle source de donn�es avec la nouvelle version de MyODBC que j'ai attach�e � la base que j'utilise dans mon appli...
    La dedans j'ai coch� : Enable dynamic cursor mais l� non plus ca change rien....
    Existe-t-il un flag pour que mon aplli puisse toucher � ma base (cr�er, supprimer, modifier) avec le mode dynaset???

    Je sais plus trop quoi faire !!

  15. #15
    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
    S'il vous plait...........Aidez-moi !!!

  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
    Bonjour,

    Quand j'essaie de me connect� gr�ce � db->OpenEx(...), je suis dans un projet bas� dialogue......
    Croyez-vous que ce soit � cause da �a qu'il apparait un rapport d'erreur ????
    Peut-�tre faut-il que je cr�e une appli SDI ou MDI sans la lier automatiquement, avec VS .NET 2003, � une base de donn�es.

    Philippe299 quand tu utilise tes fonction tu est dans un projet ?? Si oui, lequel ??

    Merci d'avance ......

  17. #17
    Membre confirm� Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par d�faut
    personnelement, j'arrive a me connecter dans un projet MFC boite de dialogue avec la fonction OpenEx
    je fais ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	CString sConnect = "Driver={SQL Server};Server=NomServeur; Trusted_Connection=no;UID=;PWD=;Database=NomBDD"; //a changer en fonction des parametres
     
    	if( !db.OpenEx(sConnect, CDatabase::noOdbcDialog|CDatabase::useCursorLib))
    	{ 
    		AfxMessageBox("Impossible d'ouvrir la base de donnée en lecture seule"); 
    		return; 
    	} 
    	else 
    	{ 
    		AfxMessageBox("Test d'ouverture réussi");
    et ca marche tres bien

  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
    Ca marche............
    C'est incroyable.
    J'ai compris pourquoi : en fait j'utilisait un pointeur sur CDatabase, et quand j'ai enlev� '*' ca a march�.....
    Je ne vois pas pourquoi, mais la je crois que je ne vai pas chercher.

    Merci lenouvo, Merci

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

Discussions similaires

  1. Connexion � une bdd (odbc) (d�butant)
    Par majong dans le forum C++
    R�ponses: 0
    Dernier message: 17/02/2008, 19h46
  2. R�ponses: 3
    Dernier message: 20/06/2007, 14h31
  3. [MFC][ODBC][D�butant] CRecordView constructor
    Par lastcheper dans le forum MFC
    R�ponses: 18
    Dernier message: 18/08/2005, 10h54
  4. tutoriel : Database.Open-Could not use, file already in use
    Par MARTIN G�rard dans le forum XMLRAD
    R�ponses: 2
    Dernier message: 04/05/2005, 11h56
  5. DRIVER ODBC INTERBASE 6 OPEN SOURCE
    Par CYRILLUS dans le forum InterBase
    R�ponses: 1
    Dernier message: 10/01/2005, 13h56

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