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# Discussion :

Besoin d'inspiration pour insertion bdd sous condition


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Besoin d'inspiration pour insertion bdd sous condition
    J'ai des signaux boolean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Brakers
           {
            public bool SignForEDP1_CB = false;
            public bool SignForEDP2_Trip = false;
            public bool SignForEDP3_LD = false;
            public bool SignForEDP4_ES = false;
            public bool SignForEDP5_start = false;
            }
    et j'ai un timer qui me fait enregistrer les état de ces signaux chaque seconde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     private void _TimerPLC_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
     
     ObjConnectionSQL.InsertIntoDatabaBraker(
     
                        Objbraker.SignForEDP1_CB,
                        Objbraker.SignForEDP2_Trip,
                        Objbraker.SignForEDP3_LD,
                        Objbraker.SignForEDP4_ES,
                        Objbraker.SignForEDP5_start
                        );
     
    }
    le timer tourne à 1 s et du coup chaque seconde il m'ajoute une ligne avec les etat des 5 signaux boolean dans la base de donnée

    --------------
    je veux ajouter une condition pour qu'il ajoute une ligne dans la base de donnée que si au moins un des 5 signaux a changer son état
    Exemple :
    dans le premier tour du timer et soit disant les 5 signaux sont false, il va ajouter une ligne de 0 dans la base de donnée, dans le deuxiéme tour il verifier si toujours les 5 signaux sont a 0 si c'est le cas il ajoute rien, s'il trouve qu'au moins un des signaux est a 1 il ajoute une ligne, puis il revérifie si aucun des 5 signaux à changer sont état.


    en bref je veux enregistrer une ligne que si un des 5 signaux à changer sont état
    Dernière modification par Invité ; 10/04/2020 à 17h14.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    déclare les en temps que propriété
    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
     private bool signal1;
     
            public bool Signal1
            {
                get { return signal1; }
                set { if (signal1 != value)
                    {
                        signal1 = value;
                        if (value)
                        {
                            UpdateDatabase();
                        }
                    }
                }
            }
     
            private void UpdateDatabase()
            {
     
            }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour, merci pour la réponse, vous avez pas d'autres proposition, vu qu'ai plusieurs signaux et non pas juste 3 (environs 120), ils regroupé sur plusieurs class et j'ai pas envoie de changer la structure de mon programme en mettant des propriété pour chaques variable

  4. #4
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Est-ce-que tu peux donner un peu plus d'informations sur ton application ? Là j'avoue que j'ai du mal à comprendre aussi bien ce qui déclenche l'enregistrement que ce que tu cherches à enregistrer comme information.

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai des signaux boolean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Brakers
           {
            public bool SignForEDP1_CB = false;
            public bool SignForEDP2_Trip = false;
            public bool SignForEDP3_LD = false;
            public bool SignForEDP4_ES = false;
            public bool SignForEDP5_start = false;
            }
    et j'ai un timer qui me fait enregistrer les état de ces signaux chaque seconde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     private void _TimerPLC_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
     
     ObjConnectionSQL.InsertIntoDatabaBraker(
     
                        Objbraker.SignForEDP1_CB,
                        Objbraker.SignForEDP2_Trip,
                        Objbraker.SignForEDP3_LD,
                        Objbraker.SignForEDP4_ES,
                        Objbraker.SignForEDP5_start
                        );
     
    }
    le timer tourne à 1 s et du coup chaque seconde il m'ajoute une ligne avec les etat des 5 signaux boolean dans la base de donnée

    --------------
    je veux ajouter une condition pour qu'il ajoute une ligne dans la base de donnée que si au moins un des 5 signaux a changer son état
    Exemple :
    dans le premier tour du timer et soit disant les 5 signaux sont false, il va ajouter une ligne de 0 dans la base de donnée, dans le deuxiéme tour il verifier si toujours les 5 signaux sont a 0 si c'est le cas il ajoute rien, s'il trouve qu'au moins un des signaux est a 1 il ajoute une ligne, puis il revérifie si aucun des 5 signaux à changer sont état.


    en bref je veux enregistrer une ligne que si un des 5 signaux à changer sont état

  6. #6
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Dans ce cas est-ce-que ce que tu veux c'est un enregistrement par seconde, un enregistrement par changement d'état, ou bien encore les deux (au plus un changement par seconde et par changement) ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Par changement d'état uniquement

  8. #8
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 905
    Points : 1 923
    Points
    1 923
    Par défaut
    Tu peux utiliser un événement pour signaler les changements d'état au moment où ils se produisent.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    public class Brakers
    {
        #region State Changed
     
        public class State
        {
            internal State(bool sig1, bool sig2, bool sig3) => (Sig1, Sig2, Sig3) = (sig1, sig2, sig3);
            public bool Sig1 { get; }
            public bool Sig2 { get; }
            public bool Sig3 { get; }
        }
     
        public class StateChangedEventArgs : EventArgs
        {
            public StateChangedEventArgs(State state, DateTime when) => (State, When) = (state, when);
            public State State { get; }
            public DateTime When { get; }
        }
     
        public delegate void StateChangedEventHandler(object source, StateChangedEventArgs args);
     
        public event StateChangedEventHandler StateChanged;
     
        private void OnStateChanged() => StateChanged?.Invoke(this, new StateChangedEventArgs(new State(_sig1, _sig2, _sig3), DateTime.Now));
     
        #endregion
     
     
        #region Synchronization Lock
     
        private object _lock = new object();
     
        private bool Get(in bool prop)
        {
            lock (_lock) return prop;
        }
     
        private void Set(ref bool prop, bool value)
        {
            lock (_lock)
            {
                if (prop == value) return;
                prop = value;
                OnStateChanged();
            }
        }
     
        #endregion
     
     
        #region Signaux
     
        private bool _sig1;
        public bool Sig1 { get => Get(in _sig1); set => Set(ref _sig1, value); }
     
        private bool _sig2;
        public bool Sig2 { get => Get(in _sig2); set => Set(ref _sig2, value); }
     
        private bool _sig3;
        public bool Sig3 { get => Get(in _sig3); set => Set(ref _sig3, value); }
     
        #endregion
    }
    Il y a un système d'événement de changement d'état au début de la classe ; j'ai préféré propager un état immutable pour ne pas avoir à réinterroger l'objet source trop souvent. J'ai également ajouté un système de verrou pour gérer les problèmes de synchronisation. Il ne reste plus qu'à s'abonner à l'événement StateChanged pour insérer le contenu du nouvel état dans la base de données. À noter que avec la structure que je te proposer l'ajout en base de données peut se faire de façon asynchrone. Accessoirement, si tu n'as pas besoin d'interroger l'état d'un objet Brakers en dehors des changements d'état tu peux supprimer les getters de propriétés.

    PS : ça veut dire quoi Brakers ? Ce ne serait pas plutôt Breakers (des interrupteurs) ?

Discussions similaires

  1. Besoin d'un "Last Insert Id" sous Talend pour une base de données PostgreSQL
    Par amine.herradi dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 29/10/2012, 16h28
  2. Réponses: 6
    Dernier message: 23/02/2010, 16h52
  3. [SP-2007] Besoin d'aide pour un dev sous Sharepoint
    Par Romz_Java dans le forum SharePoint
    Réponses: 2
    Dernier message: 05/06/2009, 16h58
  4. besoin d'aide pour personnalisation scrollbar sous firefox
    Par vachefolle91 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 05/03/2008, 17h57
  5. [MySQL] Prefixe pour insertion bdd !
    Par dekovince dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/05/2007, 16h24

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