Vous n'êtes pas identifié(e).
Pages : 1
Bonjour a tous,
Je rencontre actuellement un leger probleme quand je veux faire une requete SQL pour un bigint, pour les char, aucun soucis mais les bigint ne passe pas ....
Voila le code que j'utilise, url etant un char (ca fonctionne bien), mais avec EPOCHtime qui est un bigint, je n'arrive pas a recuperrer sa valeur....
int nFields;
int i, j;
char *url;
PGresult *res;
res = PQexecParams(conn,"SELECT EPOCHtime,url FROM master WHERE service = $1",1 ,NULL ,Service ,NULL ,NULL ,1);
nFields = PQnfields(res);
if ((PQntuples(res)) > 0)
{
printf("\n%i reccord found for %s",PQntuples(res), Service[0]);
for (i = 0; i < PQntuples(res); i++)
{
for (j = 0; j < nFields; j++)
{
if (j==0)
{
timeout = long(PQgetvalue(res,i,j);
}
printf("\nSending : %-15s", PQgetvalue(res, i, j));
url=PQgetvalue(res,0,0);
}
}
}
Comment recuperrer cette valeur qui n'est pas un char a l'origine ?
Toute aide, conseil ou meme un ptit lien vers quelque chose que j'aurai raté est la bienvenue,
Merci d'avance,
Sismon
Hors ligne
PQgetvalue renvoie un char*. Pour la transformer en long, il serait mieux d'utiliser atol.
Guillaume.
Hors ligne
Merci pour la reponse !
Mais justement mon probleme vient de la, si PQGetvalue renvois un char* alors que ma valeur stockee est un BIGINT, comment le recuperrer par la suite en int, long ou double ?!?
Car le atol me renvois 0 par exemple.
Dois-je faire une conversion avec la librairie psql ?
Merci encore,
Sismon
Hors ligne
Si le atol renvoie 0, c'est que la chaîne de caractère renvoyé par PQgetvalue contient "0". PQgetvalue renvoie la donnée au format texte, donc si vous suspectez la transformation de atol, faite un printf du retour de PQgetvalue.
Guillaume.
Hors ligne
En effet quand j'affiche le contenu directement j'ai 0 aussi alors que mes autres champs (char) s'affiche bien, donc ce n'est pas ma clause (condition) WHERE qui est en cause non plus.
Par contre avec un simple PQExec cela me renvois bien le bon chiffre... Bizar je pensais que la seule difference entre PQExec et PQExecParams etait le fait de passer des parametres.
Hors ligne
Bonjour,
Merci pour votre indication et la fonction "atol" qui rend bien le 'int' attendu. En revanche, lorsque j'essaie de l'utiliser pour des "float" seuls apparaissent les nombres avant la virgule. Par exemple sur la base de données j'ai le 'real' 12.45, avec lecture d'un code C j'obtiens '12.000000'.
Edit: Avec la fonction 'atof' mon 'real' 12.45 de la base de données se transforme en 12.4502... Y-a-t'il une astuce pour lire les "float" ?
Je vous remercie par avance pour votre aide,
Cordialement
Dernière modification par efluence (18/09/2014 15:54:27)
Hors ligne
Vous savez qu'un float n'a pas de valeur fixe ? je ne suis pas étonné qu'une valeur 12.45 vous soit renvoyé en 12.4502. Ça n'a rien à voir avec PostgreSQL mais plutôt avec la façon dont les floats sont gérés par le langage.
Guillaume.
Hors ligne
Pages : 1