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 :

Exception EOleException incompréhensible


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 147
    Par défaut Exception EOleException incompréhensible
    Bonjour,

    Sur un Double-click sur une ligne d'un DBGrid (nommé "DBGridEleveSelectionnes") je cherche à mettre à jour
    le champ "DansT" de la table que le DBgrid affiche avec
    le code donné dans ce message. Le Dataset du DBGrid
    est filtré avec "DansT = True" pour n'afficher que les
    champ ayant un "DansT" true. Donc sur un double-click
    le champ "DansT" de la ligne correspondante est positionné à False
    et au rafraichissement suivant du DbGrid la ligne
    n'est plus affichée.

    Tout fonctionne bien excepté pour le dernier enregistrement: quand
    je cherche à le supprimer j'ai une exception "EOleException" avec le
    message "BOD ou EFO égal à True ou l'enregistrement actuel a été
    supprimé. L'opération demandée nécessite un enregistrement actuel".

    J'ai toujours autant de mal à comprendre la logique
    des pointeurs sur champs de dataset mais bon, je
    me suis fais une raison, ça doit être congénital.

    Si quelqu'un pouvait m'éclairer je lui en serait reconnaissant !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    with DBGridEleveSelectionnes.DataSource.DataSet do
    for i:=0 to DBGridEleveSelectionnes.SelectedRows.Count-1 do
    begin
     
    GotoBookmark(pointer(DBGridEleveSelectionnes.SelectedRows.Items[i]));
     
    DBGridEleveSelectionnes.DataSource.DataSet.Edit;
    DBGridEleveSelectionnes.DataSource.DataSet.FieldValues['DansT']:=False;
    DBGridEleveSelectionnes.DataSource.DataSet.Post;
     
    end;
    Eric

  2. #2
    rsc
    rsc est déconnecté
    Membre émérite
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Par défaut
    Si je comprends bien, après ta dernière mise à jour, il n'y a plus rien dans ton Grid ? Le message est clair : il te dit que tu as atteint le début ou la fin du fichier (les deux en fait, puisqu'il n'y a plus rien ), et qu'il ne trouve pas d'enregistremnet courant.
    Maintenant, pourquoi cherche-t-il à se positionner sur un enregistrement courant ? A mon avis, cela ne vient pas du code que tu as cité (à moins que l'emploi du GotoBookmark, mais je ne crois pas...). Peut-être une autre procédure est-elle déclenchée à ce moment ? AfterScroll, OnDataChange...?

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 147
    Par défaut
    Le problème et que c'est le Post (voir mes lignes de code) qui plante
    (et c'est vrai que j'aurais du le dire avant).
    C'est à dire que pour ce dernier enregistrement, ce qui avait fonctionné
    avec les autres ne marche plus: Avant même de sortir de l'actualisation
    du champ, on plante (et pour répondre à ta question, je ne fais
    plus rien après, ce qui importe peu puisqu'on plante avant).


    Eric

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Le problème vient du fait que tu modifies la source de données du bookmark en direct.

    Exemple :

    3 enregistrements affcihés dans la grid: Toto,Titi,Tata
    Titi est l'enregistrement courant, et tu le passes à False, vu que tu le fais en direct sur la source du bookmark, ce champ va disparaitre du filtre d'affichage.
    Le problème, Titi avait la position 2 dans la liste, Comme il disparait, Tata prend la position 2 et ta boucle cherche la position 3 (bien oui tu viens de traiter la position 2) d'où l'erreur de fin ou debut.

    (J'espère avoir été clair ^^)

    La solution serait que que tu fasses la modification via une requete et à la fin du traitement tu rafraichis la source de données de ta grille.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    rsc
    rsc est déconnecté
    Membre émérite
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Par défaut
    Effectivement, je n'avais pas tilté sur le pb de boucle
    Citation Envoyé par Rayek Voir le message
    La solution serait que que tu fasses la modification via une requete et à la fin du traitement tu rafraichis la source de données de ta grille.
    C'est sûr que ce serait le plus propre, mais est-ce que ça ne marcherait pas simplement en modifiant dans l'ordre inverse ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i:= DBGridEleveSelectionnes.SelectedRows.Count-1 downto 0 do

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par rsc Voir le message
    Effectivement, je n'avais pas tilté sur le pb de boucle

    C'est sûr que ce serait le plus propre, mais est-ce que ça ne marcherait pas simplement en modifiant dans l'ordre inverse ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i:= DBGridEleveSelectionnes.SelectedRows.Count-1 downto 0 do
    Oui, ca fonctionnerai aussi en utilisant une boucle décrémenté.
    C'est le même problème que quand on supprime une ligne dans une liste en utilisant une boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with DBGridEleveSelectionnes,DataSource.DataSet do
    for i:=SelectedRows.Count-1 downto 0 do
    begin
      GotoBookmark(pointer(SelectedRows.Items[i]));
     
      Edit;
      FieldValues['DansT']:=False;
      Post;
    end;
    PS: J'ai modifié le With, le code devient un peu plus lisible en remplacant un des . par une , ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

Discussions similaires

  1. Exception WCF incompréhensible
    Par bleuerouge dans le forum Windows Communication Foundation
    Réponses: 2
    Dernier message: 16/08/2010, 11h15
  2. Capter exception EOleException
    Par foufar2009 dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/05/2010, 15h11
  3. Un exception NullReferenceException incompréhensible
    Par gabdeschenes dans le forum ASP.NET
    Réponses: 2
    Dernier message: 28/04/2009, 19h21
  4. Exception IndexOutOfBounds incompréhensible
    Par mithrendil dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 27/06/2008, 10h34
  5. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/06/2004, 17h25

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