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

#2 Re : C et C++ » [débutant] utilisation d'une dll C » 24/08/2010 08:47:35

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

#3 Re : C et C++ » [débutant] utilisation d'une dll C » 24/08/2010 08:17:37

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

#4 Re : C et C++ » [débutant] utilisation d'une dll C » 23/08/2010 14:38:07

Je confirme, la taille de la chaine est assez grande mais je n'ai toujours rien dans mon bytea

#5 Re : C et C++ » [débutant] utilisation d'une dll C » 23/08/2010 14:33:56

Lorsque j'utilise un sprintf, si ce que je lui donne est trop long pour loger dans la chaine, j'ai un message d'erreur qui arrête l'exécution.
Mais je vais tester en allouant une taille dont je suis sur pour voir, on ne sait jamais

#6 Re : C et C++ » [débutant] utilisation d'une dll C » 23/08/2010 14:08:52

Oui pas de problème de ce côté là. Mon compilateur me préviens si c'est trop petit de toute façon

#7 Re : C et C++ » [débutant] utilisation d'une dll C » 23/08/2010 13:50:21

Je fais l'insertion via une chaine obtenue avec sprintf. Du genre :
sprintf(query, "INSERT INTO ma_table(mon_bytea) VALUES('%s') ",ma_chaine_bytea);

Cette chaine ayant été obtenue par la fonction PQescapeByteaConn qui à priori est bien utilisée puisque je réussie l'insertion de bytea dans d'autres cas

#8 Re : C et C++ » [débutant] utilisation d'une dll C » 23/08/2010 13:11:07

Heu question bête... si la chaine que j'essaie d'insérer dans mon bytea est trop grande est ce que la fonction PQresultErrorMessage renvoie une erreur ?
D'ailleurs pour être sur, quelle est la taille maximum (en caractère) qu'il est possible d'insérer dans un bytea ?

Désolé encore des questions de débutant...

#9 Re : C et C++ » [débutant] utilisation d'une dll C » 23/08/2010 12:59:28

Et me revoilà encore une fois pour un problème étrange.
Je fais l'insertion d'un bytea via mon code C et j'obtiens... un champ vide pour le bytea que je viens d'ajouter (les autres paramètres sont présents par contre)...
Pourtant aucun message d'erreur n'est renvoyé par PQresultErrorMessage, j'ai bien utilisé la fonction faisant les échappements, ma requête contient bien le bytea en question...

Quel test pourrais-je faire pour voir ce qui cloche ?

#10 Re : C et C++ » [débutant] utilisation d'une dll C » 20/08/2010 14:51:03

Oui j'essaie de faire ça.
Je mettrais la solution si je trouve.

Merci

#11 Re : C et C++ » [débutant] utilisation d'une dll C » 19/08/2010 16:38:01

Et voilà j'ai enfin trouvé le temps de faire le test et j'obtiens donc :

ERREUR:  séquence d'octets invalide pour l'encodage ┬½ UTF8 ┬╗ : 0xe974e9
HINT:  Cette erreur peut aussi survenir si la séquence d'octets ne correspond pas au jeu de caractères attendu par le serveur, le jeu étant contrôlé par ┬½ client_encoding ┬╗.

#12 Re : C et C++ » [débutant] utilisation d'une dll C » 19/08/2010 14:28:09

Merci pour vos réponses, il faut en effet que je regarde ce qu'il y a dans la chaîne d'erreur mais je n'ai pas encore eu le temps.
Par contre j'avais effectivement testé si le client était en UTF-8 à partir de mon programme et c'était bien le cas.

#13 Re : C et C++ » [débutant] utilisation d'une dll C » 19/08/2010 11:11:01

Me revoilà pour une nouvelle question...

J'ai développé une belle dll qui s'occupe de mes fichiers mkt pour transférer leurs données dans la base mais apparemment ça coince avec les accents...
Code en C, développé sous labwindows CVI, sous windows. Base de données en UTF8...
Quand j'exécute une requête INSERT avec une chaine de caractère contenant des accents sous pgAdmin il n'y a pas de problème ça passe. Cependant quand je créais une requête (à l'aide d'un sprintf) dans mon programme puis que je l'envoie elle ne se fait pas si j'ai des accents.
Par exemple si j'ai :

char *param = "été";
char query[100];

sprintf(query, "INSERT INTO ma_table(mon_param) VALUES('%s')",param);

Et bien ça ne fonctionne pas...

Quelqu'un a une idée pour savoir d'où vient le problème ?

#14 Re : Général » Stocker/lire du binaire par requete sql » 18/08/2010 17:19:47

Autant pour moi j'ai réussi à me réveiller et à trouver dans les fonctions de libpq celle qui fera mon bonheur : PQescapeByteaConn

A bientôt !

#15 Re : Général » Stocker/lire du binaire par requete sql » 18/08/2010 16:46:41

Bonjour,

Je suis à la recherche de l'équivalent en C de cette merveilleuse fonction qu'est pg_escape_bytea mais je ne la trouve pas... Je dois surement être fatigué car elle ne doit pas être bien difficile à trouver... mais bref si quelqu'un l'a déjà rencontré ou utilisé qu'il n'hésite pas à me faire signe smile

A bientôt

#16 Re : C et C++ » FILETIME / Timestamp » 21/07/2010 15:50:10

J'avais peur de n'avoir pas d'autres solutions en effet sad
Merci quand même en tout cas

#17 Re : C et C++ » FILETIME / Timestamp » 21/07/2010 15:21:24

Encore une question... Désolé ^^

J'ai des DWORD, des WORD et des BYTE (et oui ils se sont bien amusé avec tous les types de ce genre dans la dll que je reprend ^^)
Si je prend l'exemple du DWORD, c'est un unsigned long, donc sur 4 octets... Mais dans postgreSQL il n'y a que des entiers signés...
Comment faire dans ce cas ?

#18 Re : Général » Problème accès a pg après changement pwd » 21/07/2010 14:12:34

Bonjour,

Je suis également en train de réaliser une dll avec libpq.lib sous Labwindows CVI mais j'ai un problème avec le #include "postgres.h".
A la compilation j'obtiens des erreurs sur elog.h (du genre syntax error; found 'identifier' expecting ';').
As-tu eu ce genre de problème ?

#19 Re : C et C++ » FILETIME / Timestamp » 19/07/2010 15:56:34

ok je vais me pencher la dessus.
Encore merci à vous.

#20 C et C++ » FILETIME / Timestamp » 19/07/2010 14:39:51

nanou86
Réponses : 5

Bonjour,

Encore une question de débutant... J'utilise un programme C qui manipule des dates au format FILETIME (de windows.h) et je souhaite faire des insertions dans ma base de données qui elle possède des champs timestamp...
Y a-t-il une conversion particulière à réaliser ?
Et pour le sens inverse ?

Merci d'avance pour votre aide et je m'excuse si ma question est très bête...

#21 Re : C et C++ » developper une dll pour postgresql » 08/07/2010 11:50:24

En relation avec la demande initiale d'amina voici un petit tuto (première réponse du post donné en lien) qui montre comment creer une dll en C avec DevCpp et comment créer une fonction sous PostgreSQL à l'aide de cette dll :
http://www.developpez.net/forums/d65758 … ost5333944

#22 Re : C et C++ » [débutant] utilisation d'une dll C » 08/07/2010 11:01:17

Merci pour votre réponse.
Je suis en effet sous Windows mais finalement j'ai installé devcpp pour coder et il fait la compilation également.
Merci pour votre aide smile

#23 Re : C et C++ » [débutant] utilisation d'une dll C » 08/07/2010 09:00:20

Encore une petite question pratique : avec quoi compilez vous vos fonctions C ?
Car j'avoue que je m'y perd un peu avec tout ce que j'ai pu lire sur différent forum.

#24 Re : C et C++ » [débutant] utilisation d'une dll C » 06/07/2010 11:51:03

Pour cette partie là pas vraiment de rapport mais je vais par la suite devoir coder la lecture des données de la base par l'un de ces logiciels en utilisant là encore la dll, c'est pourquoi il m'est demandé de me renseigner sur les appels externes

#25 Re : C et C++ » [débutant] utilisation d'une dll C » 06/07/2010 11:31:51

J'aurais encore une question...
Dans le cas où la base est sur un serveur et que les logiciels qui vont communiquer avec celle-ci se situent sur différents ordinateurs du réseau. La solution qui consiste à utiliser la dll directement dans postgreSQL n'est-elle pas la meilleure ?

Pied de page des forums

Propulsé par FluxBB