PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 22/03/2009 16:46:24

O-neill
Membre

Utilisation d'un Select

Bonjour,

Je découvre actuellement la libpq et essaye de l'utiliser,
J'ai modifié un des exemples de la documentation pour faire un test mais voilà ce qu'il donne:

Commande incorrecte:

qui doit normalement être suivi de l'explication de l'erreur.
Voici mon code:

#include <stdio.h>
#include <stdlib.h>
#include <postgresql/libpq-fe.h>

static void
exit_nicely(PGconn *conn)
{
    PQfinish(conn);
    exit(1);
}

int
main(int argc, char **argv)
{
    const char *conninfo;
    PGconn     *conn;
    PGresult   *res;

    /*
     * If the user supplies a parameter on the command line, use it as the
     * conninfo string; otherwise default to setting dbname=postgres and using
     * environment variables or defaults for all other connection parameters.
     */
        conninfo = "hostaddr = '127.0.0.1' dbname = 'Serveur_Atlantis' user = 'MyUser' password = 'MonMDP'";

    /* Make a connection to the database */
    conn = PQconnectdb(conninfo);
    /* Check to see that the backend connection was successfully made */
    if (PQstatus(conn) != CONNECTION_OK)
    {
        fprintf(stderr, "Connection à la base de donnée échouée: %s",
                PQerrorMessage(conn));
        exit_nicely(conn);
    }

    /*
     * Our test case here involves using a cursor, for which we must be inside
     * a transaction block.  We could do the whole thing with a single
     * PQexec() of "select * from pg_database", but that's too trivial to make
     * a good example.
     */

    /* Start a transaction block */
    res = PQexec(conn, "SELECT * FROM  \"public\".\"Compte\";");
    if (PQresultStatus(res) != PGRES_COMMAND_OK)
    {
        fprintf(stderr, "Commande incorrecte: %s", PQerrorMessage(conn));
        PQclear(res);
        exit_nicely(conn);
    }

    /*
     * Should PQclear PGresult whenever it is no longer needed to avoid memory
     * leaks
     */
    PQclear(res);

    /* close the portal ... we don't bother to check for errors ... */
    res = PQexec(conn, "CLOSE myportal");
    PQclear(res);

    /* end the transaction */
    res = PQexec(conn, "END");
    PQclear(res);

    /* close the connection to the database and cleanup */
    PQfinish(conn);

    return 0;
}

Merci pour prochaines réponses.

Dernière modification par O-neill (22/03/2009 16:50:18)

Hors ligne

#2 23/03/2009 12:22:03

gleu
Administrateur

Re : Utilisation d'un Select

PGRES_COMMAND_OK est le code de retour lorsque la commande exécutée réussit mais ne renvoie aucun résultat.

PGRES_TUPLES_OK est le code de retour lorsque la commande exécutée réussit et renvoie des lignes. Donc, si la table Compte contient des lignes, il faut tester ce code retour et non pas PGRES_COMMAND_OK.


Guillaume.

Hors ligne

#3 25/03/2009 14:41:08

O-neill
Membre

Re : Utilisation d'un Select

Merci beaucoup, ça marche nickel!!

Hors ligne

#4 14/04/2009 21:48:44

O-neill
Membre

Re : Utilisation d'un Select

Bonjour à tous,

je souhaite maintenant lire le contenu de mon res.
Imaginons maintenant que ma requête soit:

SELECT \"Nom\" FROM  \"public\".\"Compte\";

Sachant que Nom est du Type text, comment puis-je récupérer le résultat de la requête,
Enfin, je vais accompagner ma demande d'une petite suggestion, je trouve que la documentation ne comporte pas assez d'exemples concrets ou ne sont pas suffisamment développés|commentés.

Merci de vos prochaines réponses!

Hors ligne

#5 15/04/2009 09:22:56

Marc Cousin
Membre

Re : Utilisation d'un Select

Je pense que le plus simple est la méthode suivante :
via PQgetvalue pour récupérer les valeurs des enregistrements un à un. Si la requête est statique et qu'il est sûr qu'on n'aura qu'une seule colonne de type texte, ca simplifie beaucoup le code :
- Récupérer le nombre d'enregs via PQntuples (n)
- Faire une itération pour i de 0 à n-1 et récupérer la colonne 0 de la ligne i dans un char* via PQgetvalue

Pour des exemples, on doit pouvoir en trouver des bons dans des projets qui font de l'utilisation intensive de la base de données (bacula par exemple). Une recherche sur krugle donne de bons résultats...


Marc.

Hors ligne

#6 16/04/2009 23:14:15

gleu
Administrateur

Re : Utilisation d'un Select

Il doit y avoir aussi plein d'exemples dans les projets de pgfoundry. Cela étant dit, il pourrait y avoir plus d'exemples dans la documentation, c'est clair.


Guillaume.

Hors ligne

Pied de page des forums