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 :

Comment déterminer l'état d'un TDBNavigator ?


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut Comment déterminer l'état d'un TDBNavigator ?
    salut!

    Une question posée par teZone "Désactiver un boutton tant qu'on a rien tapé " et la réponse donnée par Cl@udius le 26/08/2007:
    "Il suffit d'activer/désactiver le bouton suivant l'état du DataSet lié au DBGrid:"


    ButtonPost.Enabled := DBGrid.DataSource.DataSet.State in [dsInsert, dsEdit];

    Cette réponse m'amène à la question suivante: "Comment déterminer l'état d'un TDBNavigator?"

    Le Problème est le suivant : J'ai deux tables

    la premiète tbArticle qui contient les libellés et les codes article gérée par un TDBNavigator navArticle et un TDBGrid grilArticle.

    la seconde tbMagasin qui contient les articles en stocks avec le libellé, le code, les quantités en stock etc... gérée par un TDBNavigator navMagasin et un TDBGrid grilMagasin.

    Lorsque je rajoute un Produit en Magasin, un double Click sur une ligne de grilArticle, m'insère automatiquement le libellé de l'article dans la grilMagasin.

    Ma question est comment n'insérer le libellé dans grilMagasin que si je suis en mode Insertion dans la table Magasin.

    Je pense que ça doit être quelque chose comme :
    navMagasin.DataSource.DataSet.State
    mais je ne sais pas transcrire le mode insertion

    quelqu'un peut-il m'aider à transcrire la question

  2. #2
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut Comment déterminer l'état d'un TDBNavigator?
    En fouinant dans le help de TdataSetState il y a la réponse :
    la condition est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if navMagasin.DataSource.DataSet.State=dsInsert then
    instruction;
    OK salut

  3. #3
    Membre habitué

    Inscrit en
    Août 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 253
    Points : 197
    Points
    197
    Par défaut
    D'apres ce que j'ai compris

    Tu dois désactiver la Propriété Autoedit de ta datasource, comme ça tu désactive l'insertion par le double click dans la dbgrid.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut Comment déterminer l'état d'un TDBNavigator?
    Salut Helmis

    Mon objectif n'était pas de désactiver l'AutoEdit mais de ne pas modifier le Libellé et le Code d'un article si je suis en Mode Edition.

    Je m'explique : Jai une table tbMag (Article en Magasin) et une table tbArticle comportant le Libellé et le Code Article.

    Pour éviter les erreurs sur le code Article j'importe ce Code de la table tbArticle à chaque fois que je rajoute un article en magasin. Pour cela je doubleClick sur la ligne retenu. Automatiquement ce Code est transféré sur la ligne active de la table tbMag.

    Aussi si je suis en mode Edition sur la table tbMag (pour noter le Stock ou le prix unitaire en début de période par exemple), le doubleclick sur une ligne de tbArticle ne devra pas permettre la modification du code article Magasin (qui lui est sur un autre article.

    Donc l'importation du code article ne devra être possible que si je suis en Mode rajout nouvel article et la condition :

    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
     
        if navMagasin.DataSource.DataSet.State=dsInsert then
        begin
          EtatInsert:= 'Oui';
          if tbMag.locate('Libelle',tbArticleLibelle.AsString,[]) then   // recherche article dans Magasin
          begin    // Si l'article existe supprimer l'enreg vide inséré
            if tbMag.locate('Libelle','',[]) then
            begin 
              tbMag.Edit;
              tbMag.Delete;
              tbMag.locate('Libelle',tbArticleLibelle.AsString,[]);
            end;
          end else
          begin
            if EtatInsert = 'Oui' then
            begin
              tbMag.Edit;
              tbMagLibelle.Value:= tbArticleLibelle.AsString;
              tbMagNN.Value:=tbArticleNN.AsString;
              tbMag.Post;
              edRechArticle.Text:='';
            end else
            showmessage('Insertion=non');
          end;
        end else
          begin
            tbMag.locate('Libelle',tbArticleLibelle.AsString,[]);
          end;
    cette façon de faire m'a réglé le problème. Mais en lisant le help de AutoEdit, j'ai appris une autre chose. Merci!
    Je rapelle que je suis débutant de surcroît autodidacte sur delphi

  5. #5
    Membre habitué

    Inscrit en
    Août 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 253
    Points : 197
    Points
    197
    Par défaut
    Tu pourra faire de 2 méthodes
    1- voir l'état de la datasource

    [CODE]if datasource1.State = dsEdit then [/CODE ---> tu désactive les dbedit concernés & tu les réactive après le l'événement Afterpost & Aftercancel de ta Table

    2- tu utilise les mastersources voici un lien http://www.phidels.com/php/index.php...40c50d6d5ca3ad

  6. #6
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut Comment déterminer l'état d'un TDBNavigator?
    Salut Helmis

    Je te remercie de ta disponibilté.

    Citation:
    "Tu pourras faire de 2 méthodes
    1- voir l'état de la datasource

    [code]if datasource1.State = dsEdit then [/CODE ---> tu désactive les dbedit concernés & tu les réactive après le l'événement Afterpost & Aftercancel de ta Table

    2- tu utilise les mastersources voici un lien "

    Je voudrais te situer mon Problème en te donnant le code complet lorsqu'il y a doubleclick:
    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
    procedure TForm1.grilArticleDblClick(Sender: TObject);
    var EtatInsert,EtatEdit : String;
    begin
      EtatInsert:= 'Non';
      EtatEdit:='Non';
      if navMagasin.DataSource.DataSet.State=dsEdit then
      begin
        EtatEdit:='Oui';
    // Inutile la localisation   // tbMag.locate('Libelle',tbArticleLibelle.AsString,[]);
    // créer la variable EtatEdit
      end else
      begin
        if navMagasin.DataSource.DataSet.State=dsInsert then
        begin
          EtatInsert:= 'Oui';
          if tbMag.locate('Libelle',tbArticleLibelle.AsString,[]) then   // recherche article dans Magasin
          begin    // Si l'article existe supprimer l'enreg vide inséré
            if tbMag.locate('Libelle','',[]) then
            begin
              tbMag.Edit;
              tbMag.Delete;
              tbMag.locate('Libelle',tbArticleLibelle.AsString,[]);
            end;
          end else
          begin
            if EtatInsert = 'Oui' then
            begin
              tbMag.Edit;
              tbMagLibelle.Value:= tbArticleLibelle.AsString;
              tbMagNN.Value:=tbArticleNN.AsString;
              tbMag.Post;
              edRechArticle.Text:='';
            end; 
          end;
        end else
          begin
            tbMag.locate('Libelle',tbArticleLibelle.AsString,[]);
          end;
      end ;
    end;
    Le problème n'est pas comment importer les valeurs Libellé et CodeClient mais de ne les importer que si on est en mode Insert(du navigateur). Sinon effectivement avec le DBLookUpComboBox c'est plus élégant.

    Que penses-tu de ma procedure TForm1.grilArticleDblClick STP?

    J'ai été obligé de rajouter la variable mémoire EtatInsert et EtatEdit car losque je pose le test d'existance du Client, l'insertion est automatiquement validée

  7. #7
    Membre habitué

    Inscrit en
    Août 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 253
    Points : 197
    Points
    197
    Par défaut
    Ça fait trop de test quasiment inutile, le code n'est pas clair.

    je pense que ça se résume en cela
    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
     
    procedure TForm1.grilArticleDblClick(Sender: TObject);
    var EtatInsert,EtatEdit : String;
    begin
     
     
    if tbMag.datasource.State=dsInsert then 
     
              begin         
              tbMagLibelle.Value:= tbArticleLibelle.AsString;
              tbMagNN.Value:=tbArticleNN.AsString;
              tbMag.Post;// Si tu as deja remplis les autres champs comme (Qte,prix,ect
              end;
     
    end;

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

Discussions similaires

  1. Comment déterminer un bon ou mauvais générateur d'état
    Par bruce-willis dans le forum Approche théorique du décisionnel
    Réponses: 0
    Dernier message: 09/06/2010, 10h58
  2. Comment déterminer si un composant est d'un type "TMonT
    Par DanielR dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/03/2004, 18h22
  3. [IDE][VS.NET] Comment sauvegarder l'état des 'Region' ?
    Par CkurcK dans le forum Contribuez
    Réponses: 2
    Dernier message: 23/02/2004, 14h33
  4. [Rave] comment faire un état paramétré ?
    Par HRAICHI dans le forum Rave
    Réponses: 2
    Dernier message: 02/10/2003, 10h14
  5. [CR][VB] comment générer un état ?
    Par ndi dans le forum SDK
    Réponses: 3
    Dernier message: 22/08/2002, 13h13

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