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 :

libpq et posgres (débutant)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut libpq et posgres (débutant)
    Bonjour à tous,

    Je programme en c++ sous linux (OpenSuse 10.3) et j'ai besoin de me connecter à une base de données postgresql.
    j'ai trouvé lors de ma recherche que ça se fait à l'aide de la bibliothèque libpq++.

    Pouvez vous me donner le lien de téléchargement de la bibliothèque et la méthode d'installation.

    Si vous etes encore plus généreux, pouvez vous me guider sur le bon tutoriel des fonctions offertes par libpq pour faires la connexion a la base a partir de l'application c++ et faire les les mises a jour.

    Merci d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Bonjour a tous,

    J'ai installé la bibliothèque libpq++ sous linux opensuse 10.3

    et ça marche tres bien mais lors de l'essai d'un exemple de code permettant la connexion a une base de donnée postgresql et l'execution de requetes. Voila le 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
     
    #include <string.h>
    #include <iostream.h>
    #include </usr/local/pgsql/include/libpq++.h> /* remplacer par #include “[chemin]/libpq++.h ‘‘ si VC++ ne
    reconnaît pas le chemin de libpq++, revoire l’étape 6 du chapitre 7 */
     
    int main() // Procedure principale, point d’entrée au programme
    {
         /* 1 : Ouverture de la connexion avec la base de donnée */
         /* Instanciation d’une base de données */
         PgDatabase data("dbname=mydb"); // nom de la base de données = testbase
                                                       // à remplacer par le nom d’une base
                                                       // existante dans le SGBD PostgreSQL
         /* Vérification du bon établissement de la connexion */
         if ( data.ConnectionBad() )
         {
         // Echec de la connexion
         cout << "Echec de le connexion, BD inexistante ou SGBD en panne..." << endl
         << " message d’erreur retourné : " << data.ErrorMessage() << endl;
         return 1;
         }
         else
         // Succès de la connexion
               cout << "Connexion établie... saisir vos requêtes:" << endl;
         /* 2: Obtention et traitement des requêtes */
         // Exécution des requètes utilisateur en boucle et en intéractif
         // Arrêt et terminaison du programme si l’utilisateur ne saisisse rien avant
         // de taper <ENTREE>
         ExecStatusType etat;                 // état de l’exécution
         char * buffer;                       // buffer pour les commandes utilisateur
         int fin = 0;                         // booléen qui vaut 1 pour terminer la boucle
         while (!fin)
         {
               cout << "> ";                  // prompt
               cout.flush();
               getline(cin, buffer);          // saisie de la requête utilisateur
               if ( buffer != "" )            // test du buffer
                       // buffer non vide -> requête utilisateur à exécuter
                       if ( (etat = data.Exec( buffer.c_str() )) == PGRES_TUPLES_OK )
                               // test de l’etat de l’exécution de la requête
                               data.DisplayTuples(); // affiche le résultat retourné
                       else
                               // requête retournant une erreur
                               cout << "Aucun tuples en retour..." << endl
                             << "Etat: = " << status << endl
                             << "Erreur retournée: " << data.ErrorMessage() << endl;
                             // affichage de l’erreur
               else
               // pas de requête saisie -> fin de programme et sortie
                      fin = 1;
          }
          return 0;
    } // Fin main()
    la commande de compilation est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++ -Wall -O2 -Wno-deprecated -DHAVE_NAMESPACE_STD -DHAVE_CXX_STRING_HEADER -DDLLIMPORT="" -I/usr/include/pgsql -o lib lib.cpp -L/usr/lib -libpq
    mais ça me génère des messages d'erreur,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    lib.cpp: In function ‘int main()’:
    lib.cpp:36: error: invalid conversion from ‘void*’ to ‘char**’
    lib.cpp:36: error: cannot convert ‘char*’ to ‘size_t*’ for argument ‘2’ to ‘__ssize_t getline(char**, size_t*, FILE*)’
    lib.cpp:37: warning: comparison with string literal results in unspecified behaviour
    lib.cpp:39: error: request for member ‘c_str’ in ‘buffer’, which is of non-class type ‘char*’
    lib.cpp:45: error: ‘status’ was not declared in this scope
    je suis en attente de votre aide.

    Merci d'avance.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    pour utiliser std::getline(), il faut passer une std::string, pas un char*.
    Edit: En fait, toutes tes erreurs viennent de là : ta variable char* devrait être de type string.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Merci Médinoc por votre réponse,

    En fait j'ai changé le char* par string mais j'ai eu les erreur suivantes;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    lib.cpp: In function ‘int main()’:
    lib.cpp:30: error: ‘string’ was not declared in this scope
    lib.cpp:30: error: expected `;' before ‘buffer’
    lib.cpp:36: error: ‘buffer’ was not declared in this scope
    lib.cpp:45: error: ‘status’ was not declared in this scope
    Je crois que je dois inclure une bibliothèque bien spécifique.

    Pouvez vous me guider sur ce problème.

    Merci d'avance.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Bonjour ,
    le problème de string est résolu

    en fait il faut ajouter "using namespace std ;" apres les includes.

    Mais
    j'ai trouver un autre problème.
    Lors de la compilation j'ai eu ce message d'erreur;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /usr/lib/gcc/i586-suse-linux/4.2.1/../../../../i586-suse-linux/bin/ld: cannot open output file lib: Is a directory
    collect2: ld returned 1 exit status
    je n'arrive pas a comprendre la source de ce problème est ce que c'est la commande de compilation ou bien l'erreur est dans le code ou bien dans l'emplacement de la bese de donnée.

    Bon je sais pas exactement. et je suis en attente de votre aide.

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    C'est a cause de cet argument que tu donnes:
    -o lib
    tu lui demandes de generer un fichier nomme lib, il se plaint qu'un repertoire avec ce nom existe deja.

Discussions similaires

  1. [compilation libpq] débutant
    Par VASAPANCH dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 03/06/2008, 16h51
  2. [Kylix] Re Re: débutant sur Kylix et Linux.....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/06/2002, 22h53
  3. [Kylix] Le débutant en Kylix et Linux....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 10h37
  4. Réponses: 3
    Dernier message: 07/05/2002, 16h06
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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