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

Bases de données Delphi Discussion :

Oracle - [Dates]


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Oracle - [Dates]
    Bonjour,

    Je suis en train de réaliser une application en utilisant le SGBD oracle version 10, mais j'ai quelques problèmes lors de la mise à jour de champs Dates/heures.

    Pour les connexion et la mise à jour des données, j'utilise le composant : . Le problème est que quand j'appel la méthode elle lève l'erreur suivante: "Enregistrement non trouvé ou modifié par un autre utilisateur"

    Je n'ai par contre cette erreur que si j'ai modifié un champ date, si j'ai modifié seulement une chaîne de caractère la mise à jour passe sans problème.
    Avec un champ seulement date la mise à jour fonctionne aussi correctement, je n'ai le problème que lors d'une mise à jour d'un champs contenant une Date/Heure.

    En vous remerciant par avance, car la je n'ai vraiment aucune piste.

  2. #2
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Les dates sous Oracle sont encodées sur 7 octets. C'est un format "compact" qui ne mémorise les heures, minutes et secondes, mais pas les millisecondes.
    Je pense que lorsque tu enregistres une heure, les millisecondes doivent se faire tronquer. DbExpress doit ensuite se rendre compte que l'heure présente dans la base (sans les millisecondes) est différente de celle contenue dans ses buffers (celle que tu stockes avec les millisecondes) et en conclue que quelqu'un d'autre à modifié l'enregistrement.

    Essaie d'arrondir l'heure pour supprimer les millisecondes, ça marchera peut-être mieux.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse. Cependant je n'utilise pas les composants DbExpress mais ADO.

    En regardant coté SGBD j'ai pu voir que la requête paramétrés n'est pas bien lue/reçue par Oracle.

    En fait j'ai l'impression que Delphi ne sait pas générer correctement la requête Update, notamment pour la clause where qui contient par exemple :'30/03/2011 16:03:56', alors que pour l'exécuter directement en SQL il faut plutôt faire:
    TO_DATE('30/03/2011 16:03:56','DD-MM-YYYY HH24:MI:SS').

    Je ne vois donc vraiment pas comment régler ce problème !!!!!

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par straahd2 Voir le message
    Merci pour ta réponse. Cependant je n'utilise pas les composants DbExpress mais ADO.
    Pourquoi utilises-tu un TDataSetProvider dont la principale utilité est de lier un TClientDataSet sur un TSQLQuery (DBExpress) que l'on remplace souvent par un TSimpleDataSet qui inclu les trois en un !

    Tu dois avoir des couches d'objet superflues !
    Tu souhaite utiliser un cache ?
    Tournes-toi vers les transactions si tu veux grouper de requêtes pour qu'en cas d'erreur, cela reste cohérent !

    Tu as une date dans la clause Where ? etrange, il devrait utiliser la Clé primaire pour faire sa mise à jour !

    J'ai participé à la conversion d'une appli BDE\Paradox vers ADO\Oracle, le TADODataSet fonctionne plutôt bien lorsque l'on le lie avec des TDBEdit ou autres composants DBWare ... parfois des problèmes de "une opération en plus étape bla bla" sur les QuickReport ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Oracle - Date : Rechercher avec la partie Time
    Par Kelem dans le forum JDBC
    Réponses: 2
    Dernier message: 13/08/2014, 13h37
  2. Une fonction Oracle,date
    Par samah1990 dans le forum Oracle
    Réponses: 1
    Dernier message: 06/03/2013, 09h11
  3. aide pour debutant sous oracle (date)
    Par trash_07 dans le forum Débuter
    Réponses: 3
    Dernier message: 22/03/2010, 16h19
  4. [Oracle] Dates : Fonction TO_DATE
    Par babylone7 dans le forum Oracle
    Réponses: 8
    Dernier message: 10/08/2006, 16h29
  5. Réponses: 9
    Dernier message: 17/01/2004, 10h51

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