Par Jean-Pierre DUVAL le 02/02/2007 - 17:35
Est-ce que quelqu'un peut m'aider Ă comprendre pourquoi PQexecParams ne fonctionne pas correctement quand j'utilise des parametres en mode binaire ?
J'utilise PostgreSQL 8.1 sur Windows XP. Le serveur de base de données et le client sont sur le meme ordinateur. Pieces jointes:
1) Table utilisée.
2) Un exemple qui utilise le mode texte qui fonctionne.
3) Le meme exemple qui utilise le mode binaire qui ne fonctionne pas.
Est-il posible de tracer le comportement de libpq?
Jean-Pierre DUVAL, Product Manager - jp.duval@up-comp.com - www.up-comp.com
* * *
TABLE scott.emp
/*************/
CREATE TABLE scott.emp
(
empno int4 NOT NULL,
ename varchar(10) NOT NULL,
job varchar(9),
mgr int4,
hiredate date,
sal float8,
comm float8,
deptno int4 NOT NULL
) WITHOUT OIDS;
* * *
long Working(PGconn *HandleConnexion)
/***********************************/
{
Oid TableParametresTypesTransmis[]={INT4OID};
char *Valeur="10";
char *TableParametresValeursTransmis[]={(char *)Valeur};
int TableParametresTaillesTransmis[]={2};
int TableParametresFormatsTransmis[]={0};
PGresult *Handle;
long NbEnregistrements;
Handle=PQexecParams(HandleConnexion,
"SELECT ename, hiredate, empno, sal FROM scott.emp WHERE deptno=$1::int4",
1,TableParametresTypesTransmis,TableParametresValeursTransmis,TableParametresTaillesTransmis,TableParametresFormatsTransmis,1);
if (!Handle)
return(0);
switch (PQresultStatus(Handle))
{
case PGRES_COMMAND_OK :
case PGRES_TUPLES_OK :
case PGRES_COPY_OUT :
case PGRES_COPY_IN :
case PGRES_NONFATAL_ERROR :
break;
case PGRES_EMPTY_QUERY :
LireNbEnregistrementsAffectes=0;
return(1);
break;
default :
break;
}
NbEnregistrements=(long)PQntuples(Handle);
/********************************************/
/* NbEnregistrements == 3, ce qui est VRAI. */
/********************************************/
return(NbEnregistrements);
}
long NotWorking(PGconn *HandleConnexion)
/**************************************/
{
Oid TableParametresTypesTransmis[]={INT4OID};
int Valeur=10;
char *TableParametresValeursTransmis[]={(char *)&Valeur};
int TableParametresTaillesTransmis[]={sizeof(int)};
int TableParametresFormatsTransmis[]={1};
PGresult *Handle;
long NbEnregistrements;
Handle=PQexecParams(HandleConnexion,
"SELECT ename, hiredate, empno, sal FROM scott.emp WHERE deptno=$1::int4",
1,TableParametresTypesTransmis,TableParametresValeursTransmis,TableParametresTaillesTransmis,TableParametresFormatsTransmis,1);
if (!Handle)
return(0);
switch (PQresultStatus(Handle))
{
case PGRES_COMMAND_OK :
case PGRES_TUPLES_OK :
case PGRES_COPY_OUT :
case PGRES_COPY_IN :
case PGRES_NONFATAL_ERROR :
break;
case PGRES_EMPTY_QUERY :
LireNbEnregistrementsAffectes=0;
return(1);
break;
default :
break;
}
NbEnregistrements=(long)PQntuples(Handle);
/********************************************/
/* NbEnregistrements == 0, ce qui est FAUX. */
/********************************************/
return(NbEnregistrements);
}