IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

4D for OCI et les fonctions non documentées pour les dates

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 :

 
Sélectionnez
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.
` ---------- 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 ----------

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2005 4D s.a. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.