Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Forum 4D Documentations F.A.Q 4D Trucs & astuces Notes techniques 4D & SGBDR 4D & XML 4D & Web Livres 4D

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

Date de publication : 23/05/05

Par Stéphanie Tirtiat (Intl Tech Support)
 



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

en http://www.4d.com/docs/4dforoci/4doci.html


Si le champs 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 :


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


En complément, petit script SQL pour créer la table factures :
drop table factures; 
create table factures (ID_fact varchar(3), date_fact date); 
insert into factures (ID_fact,date_fact) values ('F01','10/05/2005'); 
insert into factures (ID_fact,date_fact) values ('F02','11/05/2005'); 
insert into factures (ID_fact,date_fact) values ('F03','12/05/2005'); 
select * from factures; 
commit;



Valid XHTML 1.1!Valid CSS!

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'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsable bénévole de la rubrique 4D : Elgo - Contacter par EMail :
Vos questions techniques : forum d'entraide 4D - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.