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

Delphi Discussion :

DBCheckbox - affichage correct mais pas de mise à jour DB


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Points : 7
    Points
    7
    Par défaut DBCheckbox - affichage correct mais pas de mise à jour DB
    Bonjour à tous,

    j'ai un problème avec le composant DBCheckbox dans Delphi 2007 en Win32.

    En quelques mots, j'ai plusieurs DBCheckbox sur une fiche.
    Afin de facilité la vie à l'utilisateur, j'ai créer un Bouton qui permet de coher/décocher automatiquement plusieurs DBCheckbox (donc un ptit raccourcis afin d'économiser des click)

    Le bouton remplis bien son role, car il coche ou décoche plusieurs DBCheckbox quand on l'active...

    Cependant, la modification de valeur booleènne des DBCheckbox n'a pas l'air de "dire" au DBNavigator attaché qu'il y'a eu une modification de valeurs!
    De ce fait, l'icone pour mettre a jour l'enregistrement sur le DBNavigator de s'active pas!? (hors si on click sur un DBCheckbox manuellement ca marche)

    A mon grand maleur, les DBCheckbox n'on pas de procédure .Click pour simuler le click

    J'ai deja essayé de jouer avec les .State et .Checked des DBCheckbox afin de voir si le DBNavigator réagit, mais rien n'y fait!

    Voici un extrait du code

    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
     
    procedure TFRM_Main.LB_Disponibilite_8HClick(Sender: TObject);
    begin
      if Consultant_Dispo_8_checked=true then
      begin
        DBCB_Dispo_Lun8.Checked:=false;
        DBCB_Dispo_Mar8.Checked:=false;
        DBCB_Dispo_Mer8.Checked:=false;
        DBCB_Dispo_Jeu8.Checked:=false;
        DBCB_Dispo_Ven8.Checked:=false;
        DBCB_Dispo_Sam8.Checked:=false;
        DBCB_Dispo_Dim8.Checked:=false;
      end else
      begin
        DBCB_Dispo_Lun8.Checked:=true;
        DBCB_Dispo_Mar8.Checked:=true;
        DBCB_Dispo_Mer8.Checked:=true;
        DBCB_Dispo_Jeu8.Checked:=true;
        DBCB_Dispo_Ven8.Checked:=true;
        DBCB_Dispo_Sam8.Checked:=true;
        DBCB_Dispo_Dim8.Checked:=true;
      end;
    end;
    Ce code change donc bien l'etat "visuel" des DBCheckbox, mais n'affecte en rien l'etat du DBNavigator associé, hors dans mon cas, il faut que la base soit mise à jour avec ces nouvelles données!

    Si quelqu'un a une idée

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Et l'événement «OnChange»

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par defluc
    Et l'événement «OnChange»
    oui j'y ai pensé mais j'ai aucune idée de ce que je pourrais mettre dans cet event!?

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    j'ai aucune idée de ce que je pourrais mettre dans cet event!?
    Ca, c'est à toi de le savoir.
    Si ce que tu as mis dans l'événement «OnClick» te satisfait, tu n'as qu'à faire exécuter le même code dans l'événement «OnChange» en y mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LB_Disponibilite_8HClick(Nil);

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    salut

    evenement onclick et non click

    le plus simple aurait ete de modifier la valeur du champs
    et non l'interface

    fait peut etre un post sur ton query afin de valide les changements

    @+ Phil

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Perso au lieu de modifier les DBCheckBox, je modifierais directement les champs concernés dans la table (ou requête) via un Edit. Ainsi ton DBNavigator reflètera automatiquement le changement d'état.

    [Edit]
    Citation Envoyé par Anapurna
    le plus simple aurait ete de modifier la valeur du champs
    Anarpuna pense comme moi !

    [/Edit]
    @+ Claudius

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Points : 7
    Points
    7
    Par défaut ..
    merci pour vos suggestions.

    Mais j'aurais voulu que ca soit l'utilisateur qui valide la modification.
    Car sinon, a chaque modifications, une request sql se fait alors que peut etre se n'est pas le choix définitif de l'utilisateur (heu sais pas si vous voyez ce que je veux dire...)

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par cmarcx
    Mais j'aurais voulu que ca soit l'utilisateur qui valide la modification.
    Le choix est tout de même laissé à l'utilisateur.

    sur ton bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TaForm.TonBoutonClick(Sender: TObject);
    begin
      with TonQuery do
      begin
        if not (State in [dsEdit, dsInsert]) then Edit;
        FieldByName('MonChamp1').Value := True;
        FieldByName('MonChamp2').Value := False;
        // etc...
      end;
    end;
    Maintenant l'utilisateur peut valider ou annuler ces modifs (Post ou Cancel via le DBNavigator).

    @+ Claudius

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Cl@udius
    Le choix est tout de même laissé à l'utilisateur.

    sur ton bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TaForm.TonBoutonClick(Sender: TObject);
    begin
      with TonQuery do
      begin
        if not (State in [dsEdit, dsInsert]) then Edit;
        FieldByName('MonChamp1').Value := True;
        FieldByName('MonChamp2').Value := False;
        // etc...
      end;
    end;
    Maintenant l'utilisateur peut valider ou annuler ces modifs (Post ou Cancel via le DBNavigator).

    @+ Claudius
    Heu deso suis un peu boulet en base de données, je débute...

    Le tonQuery c'est quoi au juste?
    Moi j'ai un TMysqlServer, un TMySQLTable et un TDataSource???

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par cmarcx
    Le tonQuery c'est quoi au juste?
    Moi j'ai un TMysqlServer, un TMySQLTable et un TDataSource???
    Dans ce cas le 'TonQuery' représente le TMySQLTable.
    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
     
    procedure TFRM_Main.LB_Disponibilite_8HClick(Sender: TObject);
    var 
      Dispo: Boolean;
    begin
      Dispo := Consultant_Dispo_8.Checked;
      with MySQLTable1 do
      begin
        // S'assurer d'être en mode Edition
        if not (State in [dsEdit, dsInsert]) then Edit;
        // 
        FieldByName('Dispo_Lun8').Value := Dispo;
        FieldByName('Dispo_Mar8').Value := Dispo;
        FieldByName('Dispo_Mer8').Value := Dispo;
        FieldByName('Dispo_Jeu8').Value := Dispo;
        FieldByName('Dispo_Ven8').Value := Dispo;
        FieldByName('Dispo_Sam8').Value := Dispo;
        FieldByName('Dispo_Dim8').Value := Dispo;
      end;
    end;
    @+ Claudius

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Points : 7
    Points
    7
    Par défaut super!!!
    Super ca marche!

    voici le code final
    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
     
    procedure TFRM_Consultants.LB_Disponibilite_8HClick(Sender: TObject);
    begin
      if Consultant_Dispo_8_checked=1 then
      begin
        DBCB_Dispo_Lun8.Checked:=false;
        DBCB_Dispo_Mar8.Checked:=false;
        DBCB_Dispo_Mer8.Checked:=false;
        DBCB_Dispo_Jeu8.Checked:=false;
        DBCB_Dispo_Ven8.Checked:=false;
        DBCB_Dispo_Sam8.Checked:=false;
        DBCB_Dispo_Dim8.Checked:=false;
        Consultant_Dispo_8_checked:=0;
      end else
      begin
        DBCB_Dispo_Lun8.Checked:=true;
        DBCB_Dispo_Mar8.Checked:=true;
        DBCB_Dispo_Mer8.Checked:=true;
        DBCB_Dispo_Jeu8.Checked:=true;
        DBCB_Dispo_Ven8.Checked:=true;
        DBCB_Dispo_Sam8.Checked:=true;
        DBCB_Dispo_Dim8.Checked:=true;
        Consultant_Dispo_8_checked:=1;
      end;
      with MySQLTable_Consultants do
      begin
        // S'assurer d'être en mode Edition
        if not (State in [dsEdit, dsInsert]) then Edit;
        FieldByName('Dispo_Lun8').Value := Consultant_Dispo_8_checked;
        FieldByName('Dispo_Mar8').Value := Consultant_Dispo_8_checked;
        FieldByName('Dispo_Mer8').Value := Consultant_Dispo_8_checked;
        FieldByName('Dispo_Jeu8').Value := Consultant_Dispo_8_checked;
        FieldByName('Dispo_Ven8').Value := Consultant_Dispo_8_checked;
        FieldByName('Dispo_Sam8').Value := Consultant_Dispo_8_checked;
        FieldByName('Dispo_Dim8').Value := Consultant_Dispo_8_checked;
      end;
    end;
    Un grand merci à toi Claudius ainsi qu'aux autres

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

Discussions similaires

  1. QReport, pas de mise à jour dans les TQRMemo
    Par kurkaine dans le forum Delphi
    Réponses: 4
    Dernier message: 18/09/2006, 19h40
  2. QReport, pas de mise à jour dans les TQRMemo
    Par kurkaine dans le forum C++Builder
    Réponses: 6
    Dernier message: 16/09/2006, 18h11
  3. Code qui marche, mais pas la mise à jour
    Par Cablan dans le forum Access
    Réponses: 7
    Dernier message: 24/10/2005, 17h09
  4. Réponses: 3
    Dernier message: 05/06/2005, 01h52

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