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 12/03/2010 11:42:25

Sismon
Membre

PSQL Select bigint from a database // C

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

#2 12/03/2010 12:48:57

gleu
Administrateur

Re : PSQL Select bigint from a database // C

PQgetvalue renvoie un char*. Pour la transformer en long, il serait mieux d'utiliser atol.

Hors ligne

#3 12/03/2010 13:01:44

Sismon
Membre

Re : PSQL Select bigint from a database // C

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

#4 12/03/2010 13:08:47

gleu
Administrateur

Re : PSQL Select bigint from a database // C

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.

Hors ligne

#5 12/03/2010 13:24:31

Sismon
Membre

Re : PSQL Select bigint from a database // C

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

#6 18/09/2014 15:47:56

efluence
Membre

Re : PSQL Select bigint from a database // C

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

#7 18/09/2014 19:32:35

gleu
Administrateur

Re : PSQL Select bigint from a database // C

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.

Hors ligne

Pied de page des forums