Produit : 4D OCI 2004 · Plateforme : Mac & Win ♪
Si vous avez des difficultés à retourner les valeurs des colonnes Oracle de type date avec 4D for OCI, essayez d’utiliser ces fonctions spécifiques :
OCIDefineDateByPos
OCIBindDateByName
OCIBindDateByPos
https://4d.com/docs/4dforoci/4doci.html
Si le champ de type date de 4D ne contient que la date, celui d’Oracle stocke aussi l’heure. C’est pourquoi il faut utiliser SQLT_ODT et passer deux pointeurs au lieu d'un seul : celui pour la date et celui pour le temps, même si ce dernier n'est pas utilisé.
Exemple de code avec OCIDefineDateByPos :
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.
` ---------- exemple ----------
TABLEAU DATE(results_date;3) `tableau date pour le premier pointeur
TABLEAU ENTIER LONG(results_time;3) `tableau heure pour le second pointeur
TABLEAU ENTIER LONG($tNull;1)
TABLEAU ENTIER LONG($tTailles;1)
TABLEAU ENTIER LONG($tCodes;1)
$tTailles{1}:=255
$UserName:="xxx"
$Password:="xxx"
$OraServ:="xxx"
$sql:="SELECT date_fact FROM factures"
$Status:=OCIEnvCreate ($DescrEnv;OCI_DEFAULT)
$Status:=OCIHandleAlloc ($DescrEnv;$DescrErr;OCI_HTYPE_ERROR)
$Status:=OCIHandleAlloc ($DescrEnv;$DescrService;OCI_HTYPE_SVCCTX)
$Status:=OCIHandleAlloc ($DescrEnv;$DescrAuth;OCI_HTYPE_SESSION)
$Status:=OCIHandleAlloc ($DescrEnv;$DescrServer;OCI_HTYPE_SERVER)
$Status:=OCIServerAttach ($DescrServer;$DescrErr;$OraServ)
$Status:=OCIAttrSetVal ($DescrService;$DescrServer;OCI_ATTR_SERVER;$DescrErr)
$Status:=OCIAttrSetText ($DescrAuth;$UserName;OCI_ATTR_USERNAME;$DescrErr)
$Status:=OCIAttrSetText ($DescrAuth;$Password;OCI_ATTR_PASSWORD;$DescrErr)
$Status:=OCISessionBegin ($DescrService;$DescrErr;$DescrAuth;OCI_CRED_RDBMS;OCI_DEFAULT)
$Status:=OCIAttrSetVal ($DescrService;$DescrAuth;OCI_ATTR_SESSION;$DescrErr)
$Status:=OCIHandleAlloc ($DescrEnv;$DescrStmt;OCI_HTYPE_STMT)
$Status:=OCIStmtPrepare ($DescrStmt;$DescrErr;$sql;Length($sql))
$sqlt:=SQLT_ODT
$Status:=OCIDefineDateByPos ($DescrStmt;$DescrDefine;$DescrErr;1;
->results_date;->results_time;$sqlt;->$tNull;->$tTailles;->$tCodes;OCI_DEFAULT)
$Status:=OCIStmtExecute ($DescrService;$DescrStmt;$DescrErr;0;0;0;0;OCI_DEFAULT)
$Status:=OCIStmtFetch ($DescrStmt;$DescrErr;10)
$text:=Chaine(results_date{1})+Caractere(13)
Boucle ($i;2;Taille tableau(results_date))
$text:=$text+Chaine(results_date{$i})+Caractere(13)
Fin de boucle
ALERTE("TABLEAU DATE :"+Caractere(13)+$text)
$Status:=OCISessionEnd ($DescrService;$DescrErr;$DescrAuth)
$Status:=OCIServerDetach ($DescrServer;$DescrErr)
$Status:=OCIHandleFree ($DescrService)
$Status:=OCIHandleFree ($DescrServer)
$Status:=OCIHandleFree ($DescrErr)
$Status:=OCIHandleFree ($DescrEnv)
TABLEAU DATE(results_date;0)
TABLEAU DATE(results_time;0)
` ---------- fin exemple ----------



