#include #include #include #include PGconn *conn; PGresult *res; void exit_nicely(int status) { PQfinish(conn); exit(status); } void query(char *qStr) { printf("Query: %s\n", qStr); res = PQexec(conn, qStr); if(res==NULL) { fprintf(stderr, "Error: res==NULL\n"); fprintf(stderr, "Query: %s\n\n", qStr); PQclear(res); exit_nicely(1); } if(PQresultStatus(res)!=PGRES_COMMAND_OK && PQresultStatus(res)!=PGRES_TUPLES_OK) { fprintf(stderr, "Error: %d\n", PQresultStatus(res)); fprintf(stderr, "Query: %s\n\n", qStr); PQclear(res); exit_nicely(1); } } main(int argc, char *argv[]) { char *pghost=NULL, *pgport=NULL, *pgoptions=NULL, *pgtty=NULL; char q[256]; if(argc!=5) { fprintf(stderr, "Uso: %s \n", argv[0]); return -1; } /* abrir la conexión */ conn = PQsetdb(pghost, pgport, pgoptions, pgtty, "grupopg"); if (PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr,"La conexión a 'grupopg' falló.\n"); fprintf(stderr,"%s",PQerrorMessage(conn)); exit_nicely(1); } /* comenzar un bloque transaccional */ query("begin;"); /* PQclear limpia el PGresult cuando ya no se necesita */ PQclear(res); /* meter aqui el choro del ejemplo */ sprintf(q, "insert into miembros values(nextval('s_miembros'), '%s', '%s', '%s', %d);", argv[1], argv[2], argv[3], atoi(argv[4])); query(q); /* cerrar la transacción */ query("commit;"); PQclear(res); exit_nicely(0); return 0; // Sí, ya sé que nunca llegaremos aquí. ¿Y qué? }