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