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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Coldfusion Discussion :

Problème de date avec Coldfusion sur une base Oracle


Sujet :

Coldfusion

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 33
    Points : 17
    Points
    17
    Par défaut Problème de date avec Coldfusion sur une base Oracle
    salut à tous !
    J'ais un problème avec les dates à insérer dans une base Oracle avec ColdFusion : J'ais 2 zones de liste déroulante : mois(option value=01, 02, 03... et année(option value=2009,2010...) et je voudrais simplement concaténer mes valeur pour inserer dans ma base oracle 2009/01 pour janvier 2009 par exemple

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <cfset datj = createdate(year(#form.annee#), month(#form.mois#), day(00))> 
    	<cfset date_souhaite = dateformat(datj,"00/#form.mois#/#form.annee#")>
        <cfoutput>#date_souhaite#</cfoutput>
    	<cfquery datasource="#dsn#" name="aff">
    		  insert into TABLEDEMANDE 
    			(IDDEMANDE, DATE_SOUHAITEE)values (t_veh_demande_seq.nextval, to_date(#date_souhaite#))
    	</cfquery>
        <cfoutput>insertion OK</cfoutput>
    Les date sont un véritable casse-tête pour CF et oracle... Merci!

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    personne n'a d'idée ?
    Sinon je sui obliger d'insérer du varchar dans ma base... pas trés propre le code :/

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    Bonjour,
    Je ne suis pas expert Oracle, mais je ferai plutôt ceci :

    Je mets au format de ma base de données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <cfset date_formatee = "#form.annee#-#form.mois#-01">
    Puis j'insers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <cfquery ...>
    insert into TABLEDEMANDE (date_voulue)
    VALUES ('#date_formatee#')
    </cfquery>
    Ceci fonctionne très bien avec MySQL mais à vérifier sur Oracle.

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    apparement le mieux pour formater la date serait :
    to_date(#variable#, 'yyyy-mm-dd')

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    Bonjour,
    merci du renseignement.

    Ceci dit Oracle accepte-t-il le format de date YYYY-MM-00 ou lui faut-il une date valide YYYY-MM-01 ?

  6. #6
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Bonjour,

    Avant tout, il n'est pas nécessaire de mettre des # partout . Pour ma part, je considère ceci une très mauvaise pratique en CF (presque 10/10 sur l'échelle du programmeur goret).

    Je ferme la parenthèse... J'espère de n'avoir blessé personne.

    Je reviens à la question du PO.

    En oracle, il est préférable d'indiquer le format dans la fonction to_date sinon il prend le format par défaut qui peut changer de base à base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <cfset datj = createdate(year(form.annee), month(form.mois), day(00))>
    <cfset date_souhaite = dateformat(datj,"#form.mois#/#form.annee#")>
    <cfoutput>#date_souhaite#</cfoutput>
    
    <cfquery datasource="#dsn#" name="aff">
      insert into TABLEDEMANDE
    (IDDEMANDE, DATE_SOUHAITEE) values (t_veh_demande_seq.nextval, to_date(#date_souhaite#, 'mm/yyyy'))
    </cfquery>
    <cfoutput>insertion OK</cfoutput>
    En plus, en oracle, il préférable d'utiliser les variables "bindées" (voir la balise <CFQUERYPARAM>). Pour la simple raison que sans variable, Oracle calcule le plan d'exécution à chaque exécution d'un interrogation SQL.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    Bonjour Jowo,

    Tu écris :
    Avant tout, il n'est pas nécessaire de mettre des # partout . Pour ma part, je considère ceci une très mauvaise pratique en CF.
    Je veux bien mais en quoi, dans les codes écrits dans cette page, y a t il des # de partout ?
    (pas d'inquiétude, je ne suis pas blessé, c'est juste pour information).

    lorsque j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <cfset date_formatee = "#form.annee#-#form.mois#-01">
    C'est pour éviter de créer un objet Date qui lui prend de la mémoire.
    Ou peut-être me trompe-je ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 84
    Points : 94
    Points
    94
    Par défaut
    Bonjour,

    alors pour notre part, mise à part le problème de mémoire utilisé et du format, nous utilisons toujours les CFQUERYPARAM pour l'insertion dans les BD Oracle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <cfquery>
    insetion into maTable (maDate) values ( <cfqueryparam value="#this.Date#" null="false" cfsqltype="cf_sql_time"> )
    </cfquery>
    Par contre au niveau de la création de la date, je suis tout à fait d'accord avec JOWO

Discussions similaires

  1. [AC-2007] Problème de gestion des droits sur une base ODBC (SQL Server)
    Par alexandre.g dans le forum Sécurité
    Réponses: 0
    Dernier message: 16/06/2014, 17h35
  2. [11g] Problème de Connexion sur une Base Oracle 11g XE à partir de sqldeveloper 4.0.1
    Par iaiiai dans le forum Connexions aux bases de données
    Réponses: 1
    Dernier message: 09/05/2014, 22h45
  3. Réponses: 4
    Dernier message: 02/03/2010, 16h09
  4. Problèmes de performances sur une base oracle 10g
    Par ORAMEL dans le forum Oracle
    Réponses: 3
    Dernier message: 11/09/2007, 09h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo