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

Composants VCL Delphi Discussion :

Problème avec TIBQuery de Delphi


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    249
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 249
    Par défaut Problème avec TIBQuery de Delphi
    Bonjour à tous,
    Voulant quitter le standard de Delphi c'est à dire utiliser un TIBTABLE avec un TDBNavigator pour la gestion d'une table(Ajout, Supprimer, Refresh, Enregistrer,etc...). Moi, j'ai conçu mes propres boutons(Modifier, Enregistrer, etc.) avec un TIBQuery. Mon problème se trouve sur la propriété ModifySQL du TIBQuery. En fait j'ai placé dans cette propriété le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE
      PERSONNE
    SET
      NUM_PERS = :NUM_PERS,
      NOM_PRENOM = :NOM_PRENOM,
      PROFESSION = :PROFESSION
    Mon Enchainement: Dès que tu cliques sur le bouton Modifier, je fais un IBQuery.Edit et après pour valider la modification, clique sur le bouton enregistrer(IBQuery.Post).

    Mais dès que je fais ça, j'ai un méssage d'erreure clé primaire comme si j'enregistrai une ligne déjà existante.
    Question: C'est ou, j'ai flanché car je comprends pas l'erreure puisque je modifie et non une insertion!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut


    le problème vient de ta requête qui est incomplète! elle devrait comporter une clause where, car sinon tu fais l'update de tous les enregistrements de ta table PERSONNE. si NUM_PERS est bien la clé primaire, l'update va donc essayer de lui donner la même valeur pour tous les enregistrements d'où l'erreur.

    tu devrais faire quelque chose comme ça :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE
      PERSONNE
    SET
      NUM_PERS = :NUM_PERS,
      NOM_PRENOM = :NOM_PRENOM,
      PROFESSION = :PROFESSION
    WHERE
      NUM_PERS = :OLD_NUM_PERS
    ou alors ceci si la clé primaire ne doit pas être updatable :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE
      PERSONNE
    SET
      NOM_PRENOM = :NOM_PRENOM,
      PROFESSION = :PROFESSION
    WHERE
      NUM_PERS = :OLD_NUM_PERS

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    249
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 249
    Par défaut
    Bonjour,
    Après correction de mon code avec la condition WHERE que j'omettais et qui me donnait le méssage d'erreure de CONSTRAINT PRIMARY KEY, j'ai plus reçu d'erreure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE
      PERSONNE
    SET
      NUM_PERS = :NUM_PERS,
      NOM_PRENOM = :NOM_PRENOM,
      PROFESSION = :PROFESSION
    WHERE
      NUM_PERS = :OLD_NUM_PERS
    Mais en jétant un coup d'oeil dans ma base de données interbase, je remarque que la modification n'est pas prise en compte.
    Pourquoi cela????
    C'est aussi pareil lorsque je fais un delete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DELETE
      PERSONNE
    WHERE
      NUM_PERS = :OLD_NUM_PERS
    Pareil aussi pour le rafraîchissement des données
    NB: Dans le composant TIBTransaction, je mets ce bout de code dans sa propriété Params:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    read_committed
    rec_version
    nowait
    Ce code doit permettre de voir les valeurs validées par les autres transactions

    COrdialement.

  4. #4
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut
    Citation Envoyé par SOPSOU Voir le message
    Mais en jétant un coup d'oeil dans ma base de données interbase, je remarque que la modification n'est pas prise en compte.
    Pourquoi cela????
    C'est aussi pareil lorsque je fais un delete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DELETE
      PERSONNE
    WHERE
      NUM_PERS = :OLD_NUM_PERS
    Pareil aussi pour le rafraîchissement des données
    NB: Dans le composant TIBTransaction, je mets ce bout de code dans sa propriété Params:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    read_committed
    rec_version
    nowait
    Ce code doit permettre de voir les valeurs validées par les autres transactions

    COrdialement.
    avec quel outil effectues-tu la consultation ? lorsque tu fermes l'application les changements ne sont toujours pas pris en compte ?

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    249
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 249
    Par défaut
    Bonjour,
    Je vérifie directement si les données sont dans Interbase 7 (IBCONSOLE).
    Aussi, en quittant ma fiche, je mets dans l'évènement OnClose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try
    ibtransaction.CommitRetaining;
    except
    ibtransaction.RollbackRetaining;
    end;
    C'est tout ce que je fais.

  6. #6
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut
    excuse moi de reposer la même question, mais lorsque tu referme ton application, et actualise les données sous IBConsole (fermeture et ré-ouverture de la table) les données ne sont toujours pas modifiées ?

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

Discussions similaires

  1. Problème avec Excel et Delphi
    Par breizh44 dans le forum Débuter
    Réponses: 10
    Dernier message: 23/12/2009, 12h09
  2. [Rave] Problème avec DataMemo sous Delphi 2006
    Par bhtechnologies dans le forum Composants VCL
    Réponses: 12
    Dernier message: 30/07/2009, 15h53
  3. Problème avec ComponentEditor en Delphi 7
    Par saidus dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/01/2008, 08h48
  4. Problème avec Installshield pour Delphi 6
    Par souha2008 dans le forum Outils
    Réponses: 1
    Dernier message: 21/01/2008, 10h50
  5. Problème avec EInOutError sous delphi 2005
    Par Teb dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2005, 11h48

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