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

Oracle Discussion :

Problème de cache avec oracle 8 i


Sujet :

Oracle

  1. #1
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut Problème de cache avec oracle 8 i
    Bonjour à tous,
    vu que je n'ai pas eu de réponse sur le forum Delphi et base de données,
    je repost mon problème ici :
    mon application met à jour la base Oracle (version 8i) avec le composant TUpdateSql.
    Dans le composant TwwDBDateTimePicker, on affiche la date d'invalidité d'un assuré, mais lorsque celle ci est nulle, après la mise à jour du record, la date prend une valeur indéterminée.

    Voici le code de chargement du record :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
              //Recherche de l'assuré
              with dmo_Tables_AC.qry_Ac_Assure do
              begin
     
                  Close;
                  ParamByName('no_avs').AsString    := Assure_Modifie;
                  Active := true;
                  CachedUpdates := true;
                  Edit;
                  //Valeur Enregistrement Visa + date
                  FieldByName('ID_UPD').ReadOnly    := false;
                  FieldByName('DT_UPD').ReadOnly    := false;
                  FieldByName('ID_UPD').AsString    := dmo_Tables_AC_Sortie.LocalUser_Connected.Visa;
                  FieldByName('DT_UPD').AsDateTime  := Date;
                  //Champs qui ne peuvent être modifié par l'utilisateur
                  FieldByName('NO_AVS').ReadOnly    := true;
                  FieldByName('ID_CRE').ReadOnly    := true;
                  FieldByName('DT_CRE').ReadOnly    := true;
                  FieldByName('ID_UPD').ReadOnly    := true;
                  FieldByName('DT_UPD').ReadOnly    := true;
     
                  //Attribution du datasource aux champs du panel Détail - Bénéficiaire
                  AcorDataSource              := dmo_Tables_AC.ds_Ac_Assure;
     
                  try
     
                    Application.CreateForm(Tfm_Detail_Assure, fm_Detail_Assure);
                    fm_Detail_Assure.Attribution_DataSource_Assure(AcorDataSource);;
                    fm_Detail_Assure.Modification_En_cours := True;
                    fm_Detail_Assure.Caption := 'Modification de l''assuré : ' + FormatMaskText('999\.99\.999\.999;0;_', FieldByName('NO_AVS').AsString);
                    fm_Detail_Assure.ShowModal;
     
                  finally
     
                    fm_Detail_Assure.Free;
                    Close;
                    CachedUpdates   := False;
                    ParamByName('no_avs').AsString := Assure_Modifie;
                    Open;
     
                  end;//try
     
              end;//with dmo_Tables_AC.qry_Ac_Assure

    et de la mise à jour de l'enregistrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                Database.StartTransaction;
                try
                    ApplyUpdates;
                    Database.commit;
                    CommitUpdates;
                    CachedUpdates := false;
                except
                    Database.Rollback;
                    Probleme_Validation := True;
                    CachedUpdates := false;
                end;//try
    Ma supposition est que le cache n'est pas réinitialisé correctement, avez vous d'autres suggestions ?
    Merci d'avance pour toutes vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    comment voulez-vous qu'on réponde à un probléme Delphi ???

    je serais tenté de vous proposer de mettre CachedUpdates = true

  3. #3
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par orafrance
    comment voulez-vous qu'on réponde à un probléme Delphi ???

    je serais tenté de vous proposer de mettre CachedUpdates = true
    Merci pour cette succulente réponse, d'une part quand je poste sur Delphi avec Base de données on m'envoi sur Oracle et vis-versa.
    De plus, si tu avais pris un peu de temps pour regarder le code tu aurais vu le cachedupdates à true.

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut Re: Problème de cache avec oracle 8 i
    Citation Envoyé par lper
    et de la mise à jour de l'enregistrement:
    Database.StartTransaction;
    try
    ApplyUpdates;
    Database.commit;
    CommitUpdates;
    CachedUpdates := false;
    except
    Database.Rollback;
    Probleme_Validation := True;
    CachedUpdates := false;
    end;//try
    ha oui... vaut mieux le voir à true comme ça que pas du tout remarque

    Ici, je ne vois aucun code SQL ou PL/SQL alors je vois mal comment on pourrait te répondre... m'enfin... ça coute rien de tenter sa chance

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    fm_Detail_Assure.Free;
    Close;
    CachedUpdates := False;
    ParamByName('no_avs').AsString := Assure_Modifie;
    Open;
    :trouve:

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    OUah , l'aggression,
    Restons calme, As tu essayer avec une valeur par defaut sur la date?

  7. #7
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    La valeur de la date est bien initialisée à nulle avant la mise à jour.
    Le cachedupdates est mis à true avant la mise à jour. Il est mis à false après le commit.
    On dirait que la valeur provient d'une précédente saisie, doit on vider le cache de la base ?
    La base Oracle aurait elle repris une ancienne transaction (question d'optimisation) ?

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par lper
    La base Oracle aurait elle repris une ancienne transaction (question d'optimisation) ?
    absolument pas... à moins que le commit ne soit pas bien fait

  9. #9
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Dans ce cas, on devrait avoir une trace quelque part, comment indiquer à notre DBA où chercher ce genre d'erreur ?

  10. #10
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    heureusement que non... si la base traçait toutes les transactions j'te dis pas la taille des logs

    moi, à mon avis c'est un probléme coté Delphi mais bon...

  11. #11
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Nous avons enfin trouvé, le code doit être après le commit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
                Database.StartTransaction; 
                try 
                    ApplyUpdates; 
                    Database.commit; 
                    CommitUpdates; 
                    CachedUpdates := false; 
                except 
                    Database.Rollback; 
                    Probleme_Validation := True; 
                    CachedUpdates := false; 
                  CloseUpdateSQLQuery(dmo_Tables_AC.qry_Ac_Assure,
                                      dmo_Tables_AC.UpdateSQL_Ac_Assure);
                end;//try 
     
    procedure CloseUpdateSQLQuery(qry : TQuery; updtSQL : TUpdateSQL);
    var i : Integer;
    begin
      if updtSQL = nil then Exit;
      for i := qry.Database.DataSetCount - 1 downto 0 do
      begin
        if ((qry.Database.DataSets[i]).Owner.Name = updtSQL.Name) and
           (qry.Database.DataSets[i] is TQuery) then
        begin
          TQuery(qry.Database.DataSets[i]).Close;
          TQuery(qry.Database.DataSets[i]).UnPrepare;
          Exit;
        end;
      end;
    end;
    C'est une solution Delphi, mais lorsque la base était de type interbase, nous n'avions pas besoin de ce code, a voir si c'est le bon forum...
    Merci quand même pour toutes vos réponses.

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    pense au tag résolu et à en informer la communauté Delphi

    EDIT : le résolu c'est fait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'export avec oracle Intermedia
    Par florent-k dans le forum Oracle
    Réponses: 6
    Dernier message: 26/11/2007, 19h03
  2. [Oracle] Problème de case avec oracle
    Par furtif1 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/02/2007, 20h48
  3. [Forms]Problème de fusion avec oracle forms 6i
    Par Sabact dans le forum Forms
    Réponses: 2
    Dernier message: 25/10/2006, 07h50
  4. Problème concaténation requête avec ORACLE
    Par kobe dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/08/2005, 11h57
  5. Problème de cache avec Oracle 8i
    Par lper dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/11/2004, 16h50

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