Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Général » [libpq] ERREUR: longueur invalide dans la valeur externe ½ numeric » 28/11/2008 11:57:04
bon alors, j'avance
la ou je comprend pas, c'est que si je met
intValues[0] =5;
dans la db, j'ai 83886080
et si je met
intValues[0] =83886080;
dans la db, j'ai 5.
ha vi et 83886080 en hexa , cela donne 5000000
KEZAKO???? comprend plus trop :-(
merci
a++
#2 Re : Général » PQexecPrepared : le curseur myportal existe deja » 28/11/2008 11:55:11
en fait, j'ai du faire ceci
res = PQprepare (conn,
"cursor_name",
"DECLARE select_cursor CURSOR WITH HOLD FOR select * from tab_3 WHERE col_3 = $1",
1, /* one param */
NULL);
le truc, c'est que dans l'application reel, le open et le fetch sont appelé via des progrma (au sens cobol) different. et donc je ne sais pas faire de begin end ( car je ne saurais pas quand faire le end)
merci pour ntout
a++
#3 Re : Général » [libpq] ERREUR: longueur invalide dans la valeur externe ½ numeric » 28/11/2008 09:20:35
chtit up :-(
#4 Re : Général » [libpq] ERREUR: longueur invalide dans la valeur externe ½ numeric » 27/11/2008 16:27:30
#5 Re : Général » [libpq] ERREUR: longueur invalide dans la valeur externe ½ numeric » 27/11/2008 15:47:02
c'est la version 8.3 de postgres
et lenthtvalues[0] = 8 c'est le second chiffre imprimé par
printf("%f %d\n",realvalue[0],LengthValues[0]);
et donc 2.200000 8
merci
a+++
#6 Re : Général » [libpq] ERREUR: longueur invalide dans la valeur externe ½ numeric » 27/11/2008 15:29:45
salut et merci
la requete est ceci
res = PQprepare (conn,
"",
"INSERT INTO tab_3 VALUES ($1, 2, 'kk')",
1, /* one param */
NULL);
et le printf donne ceci
2.200000 8
les données sont declaré comme ceci
double realvalue[5];
merci
a++
#7 Général » [libpq] ERREUR: longueur invalide dans la valeur externe ½ numeric » 27/11/2008 15:08:13
- elekis
- Réponses : 7
bonjour,
voila, je comprend pas trop, j'ai l'erreur suivante sur cette petite portion de code
char *paramValues[5];
int LengthValues[5];
int FormatValues[5];
...
realvalue[0] = 2.2;
paramValues[0] = (char*)&realvalue[0];
LengthValues[0] = sizeof(realvalue[0]);
printf("%f %d\n",realvalue[0],LengthValues[0]);
FormatValues[0] = 1;
res = PQexecPrepared(conn,
"",
1,
paramValues,
LengthValues,
FormatValues,
1);
testres(res);
j'ai l'erreur suivante, et je ne sais pourquoi :
longueur invalide dans la valeur externe ½ numeric
si je comprend bien il rale sur le fait que la longeur est mauvaise mais bon , c'est la longueur d'un double
je sais pas si cela a avoir mais voici comment la table est creer
CREATE TABLE tab_3 (col_1 numeric(53,2), col_2 BIGINT, col_3 TEXT)
si qqn a une idée.??
merci
a++
#8 Re : Général » PQexecPrepared : le curseur myportal existe deja » 27/11/2008 15:02:43
c'est bon, j'ai trouve, il faut faire un close cursor
a++
#9 Général » PQexecPrepared : le curseur myportal existe deja » 25/11/2008 13:58:17
- elekis
- Réponses : 3
bonjour, je remet mon message ici en esperant avoir un peu plus de chanse
voila, j'essaie de faire un simple petit programme avec des cursors et des variables dynamique (les $X) en C. le but etant que j'arrive a changer la variable sans refaire le prepare .
je fait donc
PQprepare (conn,
"my_cursor",
"DECLARE myportal CURSOR FOR select * from tab_3 WHERE COL_3 = $1",
1, /* one param */
NULL);
une seul fois
et puis je fais un
paramValues[0]= "zzze";
res = PQexecPrepared(conn,
"my_cursor",
1,
paramValues,
NULL,
NULL,
1);
ensuite je fetch (tout fonctionne)
et puis ben j'aimerais bien changer la valeur du param
je fais donc un
paramValues[0]= "ee";
res = PQexecPrepared(conn,
"my_cursor",
1,
paramValues,
NULL,
NULL,
1);
et la cela foire. j'ai le message
ERREUR: le curseur ½ myportal ╗ existe dÚjÓ
or je sais qu'il existe, c'est le but .
qqn aurait il une idée de pourquoi??? et comment resoudre
merci a++
voici le code complet (basé sur un example)
/*
* testlibpq.c
*
* Test the C version of libpq, the PostgreSQL frontend library.
*/
#include <stdio.h>
#include <stdlib.h>
#include "libpq-fe.h"
static void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
PGresult* FetchFirst(PGconn * conn){
PGresult* res = PQexec(conn, "FETCH FIRST in myportal");
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "FETCH failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
return res;
}
int
main(int argc, char **argv)
{
PGconn *conn;
PGresult *res;
int nFields;
int i,
j;
const char *paramValues[1];
conn = PQsetdbLogin("localhost", NULL, NULL,NULL, "dbu", "root","ouvretoi");
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(conn));
exit_nicely(conn);
}
res = PQexec(conn, "BEGIN");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
res = PQprepare (conn,
"my_cursor",
"DECLARE myportal CURSOR FOR select * from tab_3 WHERE COL_3 = $1",
1, /* one param */
NULL);
PQclear(res);
paramValues[0]= "zzze";
res = PQexecPrepared(conn,
"my_cursor",
1,
paramValues,
NULL,
NULL,
1);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
res = FetchFirst(conn);
nFields = PQnfields(res);
for (i = 0; i < nFields; i++)
printf("%-15s", PQfname(res, i));
printf("\n\n");
while(PQresultStatus(res) == PGRES_TUPLES_OK && PQntuples(res) == 1)
{
for (j = 0; j < nFields; j++)
printf("%-15s", PQgetvalue(res, 0, j));
printf("\n");
PQclear(res);
res = PQexec(conn, "FETCH NEXT in myportal");
}
PQclear(res);
paramValues[0]= "ee";
res = PQexecPrepared(conn,
"my_cursor",
1,
paramValues,
NULL,
NULL,
1);
fprintf(stderr, " %s", PQerrorMessage(conn));
res = FetchFirst(conn);
/* first, print out the attribute names */
nFields = PQnfields(res);
for (i = 0; i < nFields; i++)
printf("%-15s", PQfname(res, i));
printf("\n\n");
while(PQresultStatus(res) == PGRES_TUPLES_OK && PQntuples(res) == 1)
{
for (j = 0; j < nFields; j++)
printf("%-15s", PQgetvalue(res, 0, j));
printf("\n");
PQclear(res);
res = PQexec(conn, "FETCH NEXT in myportal");
}
PQclear(res);
res = PQexec(conn, "CLOSE myportal");
PQclear(res);
/* end the transaction */
res = PQexec(conn, "END");
PQclear(res);
/* close the connection to the database and cleanup */
PQfinish(conn);
return 0;
}
Pages : 1