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: Tout sélectionner
#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;
}
-
SangJun
- Messages : 10