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

Stéphanie Tirtiat

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

- Auteur : Stéphanie Tirtiat

- Parution : 23 mai 2005

- Licence : Copyright ® 2005 4D s.a. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.

Sommaire

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 :

1. ` ---------- exemple ----------

3. TABLEAU DATE(results_date;3) `tableau date pour le premier pointeur

4. TABLEAU ENTIER LONG(results_time;3) `tableau heure pour le second pointeur

5. TABLEAU ENTIER LONG($tNull;1)

6. TABLEAU ENTIER LONG($tTailles;1)

7. TABLEAU ENTIER LONG($tCodes;1)

9. $tTailles{1}:=255

11. $UserName:="xxx"

12. $Password:="xxx"

13. $OraServ:="xxx"

15. $sql:="SELECT date_fact FROM factures"

17. $Status:=OCIEnvCreate ($DescrEnv;OCI_DEFAULT)

18. $Status:=OCIHandleAlloc ($DescrEnv;$DescrErr;OCI_HTYPE_ERROR)

19. $Status:=OCIHandleAlloc ($DescrEnv;$DescrService;OCI_HTYPE_SVCCTX)

20. $Status:=OCIHandleAlloc ($DescrEnv;$DescrAuth;OCI_HTYPE_SESSION)

21. $Status:=OCIHandleAlloc ($DescrEnv;$DescrServer;OCI_HTYPE_SERVER)

23. $Status:=OCIServerAttach ($DescrServer;$DescrErr;$OraServ)

24. $Status:=OCIAttrSetVal ($DescrService;$DescrServer;OCI_ATTR_SERVER;$DescrErr)

25. $Status:=OCIAttrSetText ($DescrAuth;$UserName;OCI_ATTR_USERNAME;$DescrErr)

26. $Status:=OCIAttrSetText ($DescrAuth;$Password;OCI_ATTR_PASSWORD;$DescrErr)

27. $Status:=OCISessionBegin ($DescrService;$DescrErr;$DescrAuth;OCI_CRED_RDBMS;OCI_DEFAULT)

28. $Status:=OCIAttrSetVal ($DescrService;$DescrAuth;OCI_ATTR_SESSION;$DescrErr)

30. $Status:=OCIHandleAlloc ($DescrEnv;$DescrStmt;OCI_HTYPE_STMT)

31. $Status:=OCIStmtPrepare ($DescrStmt;$DescrErr;$sql;Length($sql))

33. $sqlt:=SQLT_ODT

34. $Status:=OCIDefineDateByPos ($DescrStmt;$DescrDefine;$DescrErr;1;

35. ->results_date;->results_time;$sqlt;->$tNull;->$tTailles;->$tCodes;OCI_DEFAULT)

37. $Status:=OCIStmtExecute ($DescrService;$DescrStmt;$DescrErr;0;0;0;0;OCI_DEFAULT)

39. $Status:=OCIStmtFetch ($DescrStmt;$DescrErr;10)

41. $text:=Chaine(results_date{1})+Caractere(13)

43. Boucle ($i;2;Taille tableau(results_date))

44. $text:=$text+Chaine(results_date{$i})+Caractere(13)

45. Fin de boucle

47. ALERTE("TABLEAU DATE :"+Caractere(13)+$text)

49. $Status:=OCISessionEnd ($DescrService;$DescrErr;$DescrAuth)

50. $Status:=OCIServerDetach ($DescrServer;$DescrErr)

51. $Status:=OCIHandleFree ($DescrService)

52. $Status:=OCIHandleFree ($DescrServer)

53. $Status:=OCIHandleFree ($DescrErr)

54. $Status:=OCIHandleFree ($DescrEnv)

56. TABLEAU DATE(results_date;0)

57. TABLEAU DATE(results_time;0)

59. ` ---------- fin exemple ----------