Bonjour, le code suivant fonctionne pour cette requete SQL :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
select nom from client where code=:cd
mais si je change le requete par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select nom,prenom from client where code=:cd
ça fonctionne pas

ci-dessous tout le code source

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
 
#include "stdafx.h"
#include <conio.h>
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <oci.h>
 
static OCIEnv           *p_env;
static OCIError         *p_err;
static OCISvcCtx        *p_svc;
static OCIStmt          *p_sql;
static OCIDefine        *p_dfn    = (OCIDefine *) 0;
static OCIBind          *p_bnd    = (OCIBind *) 0;
 
 
void _tmain(int argc, _TCHAR* argv[])
{
   int             p_bvi;
   char            p_sli[20];
   int             rc;
   char            errbuf[100];
   int             errcode;
 
   rc = OCIInitialize((ub4) OCI_DEFAULT, (dvoid *)0,  // Initialize OCI
           (dvoid * (*)(dvoid *, size_t)) 0,
           (dvoid * (*)(dvoid *, dvoid *, size_t))0,
           (void (*)(dvoid *, dvoid *)) 0 );
 
   // Initialize evironment
   rc = OCIEnvInit( (OCIEnv **) &p_env, OCI_DEFAULT, (size_t) 0, (dvoid **) 0 );
 
   // Initialize handles
   rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_err, OCI_HTYPE_ERROR,
           (size_t) 0, (dvoid **) 0);
   rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_svc, OCI_HTYPE_SVCCTX,
           (size_t) 0, (dvoid **) 0);
 
   // Connect to database server
   rc = OCILogon(p_env, p_err, &p_svc, (OraText *) "test", 4, (OraText *)"test", 4, (OraText *)"DBV8", 4);
   if (rc != 0) {
      OCIErrorGet((dvoid *)p_err, (ub4) 1, (text *) NULL, &errcode, (OraText *) errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
      printf("Error - %.*sn", 512, errbuf);
      exit(8);
   }
 
   /* Allocate and prepare SQL statement */
   rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_sql,
           OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0);
   rc = OCIStmtPrepare(p_sql, p_err, (OraText *) "select nom,prenom from client where code=:cd",
           (ub4) 37, (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT);
 
   /* Bind the values for the bind variables */
   p_bvi = 1;     /* Use DEPTNO=10 */
   rc = OCIBindByName(p_sql, &p_bnd, p_err, (text *) ":cd",
           -1, (dvoid *) &p_bvi, sizeof(int), SQLT_INT, (dvoid *) 0,
           (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT);
	//printf("rc = %d",rc);
   // Define the select list items
   rc = OCIDefineByPos(p_sql, &p_dfn, p_err, 1, (dvoid *) &p_sli,
           (sword) 20, SQLT_STR, (dvoid *) 0, (ub2 *)0,
           (ub2 *)0, OCI_DEFAULT);
 
   // Execute the SQL statment
   rc = OCIStmtExecute(p_svc, p_sql, p_err, (ub4) 1, (ub4) 0,
           (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT);
 
   while (rc != OCI_NO_DATA) {             // Fetch the remaining data
      printf("\n%s",p_sli);
      rc = OCIStmtFetch(p_sql, p_err, 1, 0, 0);
   }
 
   rc = OCILogoff(p_svc, p_err);                           // Disconnect
   rc = OCIHandleFree((dvoid *) p_sql, OCI_HTYPE_STMT);    // Free handles
   rc = OCIHandleFree((dvoid *) p_svc, OCI_HTYPE_SVCCTX);
   rc = OCIHandleFree((dvoid *) p_err, OCI_HTYPE_ERROR);
 
   getch();
}
Bien à vous

Abdelkaoui