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

C++Builder Discussion :

Erreur BDE lors de la mise à jour d'un champ "Edition impossible.."


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Points : 104
    Points
    104
    Par défaut Erreur BDE lors de la mise à jour d'un champ "Edition impossible.."
    Salut a tous,

    J'ai une erreur en voulant faire une mise a jour sur un champ d'une de mes table. J'utilise BDS2006 et les composants BDE.
    Lors de l'instruction "post" j'ai le message suivant : "edition impossible car un autre utilisateur a modifié l'enregistrement".
    C'est une base de type mySql que j'attaque avec un driver odbc Mysql.
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    tbComm->Active=true;
    tbComm->First();
    while(!tbComm->Eof){
    	if(tbCommidComm->Value!=numC){
    		tbComm->Next();
    	}else{
    		tbComm->Edit();
    		tbCommdateValidComm->Value=today;
    		tbCommetatComm->Value=1;
    		tbComm->Post();
                    break;
            }
    }
    J'ai bien vu ce post mais ca ne change rien. Quelqu'un à t'il une idée ?
    Merci
    Marcootz

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 24
    Points
    24
    Par défaut
    Je ne sais si je me trompe mais je ne vois pas de TBxx->Next dans le else or je pense qu'il faut qu'il s'exécute dans le then comme dans le else.
    Dans une boucle de ce type, je met le TB->Next en dehors du then/else.

  3. #3
    Membre régulier Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Points : 104
    Points
    104
    Par défaut
    Salut sprevost,

    En fait ce code n'est censé modifié qu'un seul champ. Je fais le while pour trouver le champs à modifié en regardant la valeur de 'tbCommidComm'.
    Une fois la valeur modifié je sort de mon while avec le break, c'est donc pour ca que je n'ai pas besoin de faire de next dans la partie else...

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 360
    Points : 170
    Points
    170
    Par défaut
    Je ne comprends pas bien ton code, tu édite tbComm mais tu modifies d'autres tables (tbCommdateValidComm->Value=today; et tbCommetatComm->Value=1.

    Sinon, afin d'éviter ce genre de message d'erreur, juste avant chaque poste je test si la table est en édition ou insertion, si c'est le cas, j'applique un post ou un cancel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (dsComm->State == dsEdit || dsComm->State == dsInsert)
    Si tes deux autres tables sont liés à ta table tbComm, peut-être qu'après avoir fait ..->Value... cette dernière est mis à Post() automatiquement.

    PS: dsComm est un TDataSource relié à tbComm

  5. #5
    Membre régulier Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Points : 104
    Points
    104
    Par défaut
    Salut Whitespirit,

    En fait tbCommdateValidComm et tbCommetatComm ne sont pas des autres tables. C'est les champs de ma table tbComm. Quand tu double clique sur ton composant table et que tu fait aujouter les champs, il te créer des variables TStringField portant le nom de tes champs. D'ou le tbCommdateValidComm et tbCommetatComm.

    Sinon merci pour ta ligne, je vais mettre ca, ca evitera déja un message d'erreur. Mais il reste toujours un souci : Pourquoi il ne veut pas mettre à jour mon champs alors que j'ai bien fait un tbComm->Edit() .

    A+

  6. #6
    Membre régulier Avatar de marcootz
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 159
    Points : 104
    Points
    104
    Par défaut
    Salut,

    Pour info, faire un à la place du règle le problème.
    Je ne comprend pas trop pourquoi mais apparement ca marche.

    A+

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

Discussions similaires

  1. [WebService] - Erreur lors de la mise à jours
    Par Anto03 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 24/12/2009, 09h46
  2. [AC-2003] Erreur lors de la mise à jour d'une table SQL Server 2008
    Par suziwan dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/12/2009, 22h06
  3. [WD14] Erreur lors d'une mise à jour de procédure stocké
    Par klbsjpolp dans le forum HyperFileSQL
    Réponses: 0
    Dernier message: 16/07/2009, 18h45
  4. [1.x] [crud] erreur lors de la mise à jour d'un enregistrement
    Par Mitaka dans le forum Symfony
    Réponses: 3
    Dernier message: 13/06/2008, 11h46

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