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).

#26 23/08/2010 14:54:39

Marc Cousin
Membre

Re : [débutant] utilisation d'une dll C

Ok, c'est donc une erreur d'exécution, pas de compilation.

Bref, si ce n'est pas la cause du problème, je ne vois pas.

Vérifiez chacune des étapes : la chaîne générée par PQescapeByteaConn, celle générée par sprintf, ce que retourne PQExec…


Marc.

Hors ligne

#27 24/08/2010 08:17:37

nanou86
Membre

Re : [débutant] utilisation d'une dll C

Pas de problème pour les chaines, elles semblent tout à fait correctes.
J'obtiens un PGRES_TUPLES_OK mais un champ NULL avec PQgetvalue de ma colonne contenant les bytea

Hors ligne

#28 24/08/2010 08:39:31

Marc Cousin
Membre

Re : [débutant] utilisation d'une dll C

C'est donc que quelque chose ne va pas dans l'ordre que vous envoyez. vous pouvez le copier coller ? (ainsi que la définition de la table)


Marc.

Hors ligne

#29 24/08/2010 08:47:35

nanou86
Membre

Re : [débutant] utilisation d'une dll C

Ok.
Alors la table :
CREATE TABLE generalconfiguration (generalconfigid serial8 PRIMARY KEY, generalconfiguration bytea, generalconfigsize int4);

Par contre je n'arrive pas avoir la requête entière car le bytea est trop grand pour être affiché.
Mais je la construit avec :
sprintf(query, "INSERT INTO generalconfiguration(generalconfiguration,generalconfigsize) VALUES('%s',%d) "
            "RETURNING generalconfigid as id",
            stopConf,
            currentConfIndex->endConfSize);

stopconf étant la chaine échappée par la fonction PQescapeByteaConn et currentConfIndex une structure contenant plusieurs info dont la taille de la configuration

Hors ligne

#30 24/08/2010 10:05:28

Marc Cousin
Membre

Re : [débutant] utilisation d'une dll C

Ça devrait marcher.

Toutefois, pour ce genre de requête, il serait plus malin, à mon avis, de passer par PQExecParams : ça évitera la (très coûteuse) conversion du bytea vers une chaîne de caractères, sans même parler du temps perdu par le parseur SQL à traiter une chaîne.

Il y a une explication sur comment le faire ici :
http://archives.postgresql.org/pgsql-in … g00005.php

C'est un tout petit peu plus compliqué, mais beaucoup plus rapide et plus fiable.


Marc.

Hors ligne

#31 24/08/2010 10:06:48

nanou86
Membre

Re : [débutant] utilisation d'une dll C

Ok je vais tester ceci.
Merci beaucoup

Hors ligne

Pied de page des forums