SangJun | Bonjour,
Comment se fait que PgExec génère une erreur de segmentation pour une requête qui s'exécute "manuellement" si on la copie-colle sur PgAdmin?
J'ai beau retourner le problème dans tout les sens, je ne vois pas comment m'en sortir. Je copie-colle le code pour donner un peu plus de détails.
Merci de votre aide
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include "libpq-fe.h"
- static void exit_nicely(PGconn *conn)
- {
- PQfinish(conn);
- exit(1);
- }
- int bande()
- {
- const char *conninfo;
- PGconn *conn;
- PGresult *res;
- int nFields;
- int i, j;
- char maRequete[250];
- int i = 1; int j = 2;
- conninfo = "***chaine pour se connecter***";
- /* 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 to database failed: %s", PQerrorMessage(conn));
- exit_nicely(conn);
- }
- /* Start a transaction block */
- res = PQexec(conn, "BEGIN" );
- if (PQresultStatus(res) != PGRES_COMMAND_OK)
- {
- fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
- PQclear(res);
- exit_nicely(conn);
- }
- /*
- * Should PQclear PGresult whenever it is no longer needed to avoid memory
- * leaks
- */
- PQclear(res);
- while(j<=nbPoints)
- { strcpy(maRequete,"***une requete***" );
- printf("%s \n",maRequete);
- res = PQexec(conn,maRequete);
- if (PQresultStatus(res) != PGRES_TUPLES_OK)
- {
- fprintf(stderr, "SELECT failed: %s \n", PQerrorMessage(conn));
- fprintf(stderr, "maRequete= %s \n", maRequete);
- PQclear(res);
- exit_nicely(conn);
- }
- PQclear(res);
- if (i==1) //Si c'est le premier segment, on crée le premier polygone
- {
- strcpy(maRequete,"***une requete***" );
- res = PQexec(conn,maRequete);
- if (PQresultStatus(res) != PGRES_TUPLES_OK)
- {
- fprintf(stderr, "SELECT failed: %s \n", PQerrorMessage(conn));
- fprintf(stderr, "maRequete= %s \n", maRequete);
- PQclear(res);
- exit_nicely(conn);
- }
- PQclear(res);
- }else // Sinon on fait une union avec le nouveau polygone
- {
- strcpy(maRequete,"***une requete***" );
- printf("%s\n",maRequete);
- res = PQexec(conn,maRequete); /* Instruction qui génère l'erreur de segmentation */
- if (PQresultStatus(res) != PGRES_TUPLES_OK)
- {
- fprintf(stderr, "SELECT failed: %s \n", PQerrorMessage(conn));
- fprintf(stderr, "maRequete= %s \n", maRequete);
- PQclear(res);
- exit_nicely(conn);
- }
- PQclear(res);
- }
- i++;
- j++;
- }
- /* end the transaction */
- res = PQexec(conn, "END" );
- PQclear(res);
- /* close the connection to the database and cleanup */
- PQfinish(conn);
- return 0;
- }
|
|