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 :

Tester la présence ou non d'un utilisateur dans un agenda


Sujet :

Delphi

  1. #1
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut Tester la présence ou non d'un utilisateur dans un agenda
    Bonjour

    Mon probleme est le suivant

    J ai un composant planners(TMS planner a l époque ou c'etait libre).

    Sur l insert j ouvre une fenetre dans laquelle il y a un menu déroulant avec le nom d un prof et un menu déroulant avec le nom d une salle.

    Quand je valide le nom prof et salle est mis dans le planner..

    mon probleme est de tester si la salle n'est pas deja prise a l heure demander et tester si le prof n'est pas prevu dans une autre salle a l heure demander.

    Le problème c'est de teste la valeur heures et jour du planning,

    et surtout de tester le entre:
    1)prof X salle 2 ->09:00 a 09:25
    2)prof X salle 1 ->09:10 a 10:00

    Le pof peut pas etre a 2 endroits différents au meme moment

    je suis pas sur d etre tres clair car j ai du mal a synthétisé le problème.

    merci de l aide

    a+
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  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 : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Cela semble simple mais pour t'aider efficacement, il serait mieux que tu fournisses un bout de ta source qui permette d'y intégrer un code vraiment opérationnel dans son contexte.

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    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 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    on suppose que le prof a un identifiant et que les date inscrite le sont
    dans une base de donnée il te suffit donc de rechercher
    si dans la table il existe un occurrence ayant les même propriété


    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    Bonjour
    Désole de n avoir pu répondre plutôt, je suis pas programmeur mais dans le réseau et j ai eu pas mal de soucis....

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    procedure TFplanning.Planner1ItemInsert(Sender: TObject; Position, FromSel,
      FromSelPrecise, ToSel, ToSelPrecise: Integer);
      var
      idcpt,idcpt2,idcpt3:integer ;
      ccalcule:variant  ;
      DateChaine: string;  //id planning+compteur table
    begin
     ////////Icrementation des table por les id planning salle_prof calcul heures/////
    Planningmodule.Tplanning.Last;   //table planning
    Planningmodule.TCalculeheures.Last;  //table calcul des heures
    moduleProfesseur.Table1.Last;/////table salles prof
    idcpt:=Planningmodule.Tplanning.Fields[0].AsInteger;   //compteur pour numeros unique planning
    idcpt2:=Planningmodule.TCalculeheures.fields[0].asinteger;   //compteur pour numeros unique calcul des heures
     idcpt3:=moduleProfesseur.Table1.Fields[0].AsInteger;
    Planner1.Items.Selected:=nil;
    Fnouveaucours.showmodal;//affiche le controle planning
     
     i:=planner1.Items.Count  ;
     
      if planner1.Items.HasItem(fromSel,toSel,Position) then
      begin
        ShowMessage('Cannot create item.'#13#10'Selected period already contains an item without overlap !');
        Exit;
      end;
     
          Planner1.Items.BeginUpdate;
     
      with (Planner1.Items.Add) do
      begin
     
        Text.Add(inttostr(idcpt + 1 ));
        Text.Add('Professeur :'+Fnouveaucours.DBComboBoprof.Text );  //affiche la valeur de l'edit dans l items cree
         Text.Add('Salle : ' +Fnouveaucours.DBComboBoxsalle.Text );
        ItemPos := Position;
        ItemEnd := ToSel;
        ItemBegin := FromSel;
        CaptionType := ctTime;
        planner1.Caption.Title:=Fnouveaucours.DBComboBoxsalle.Text;
     
    //////////////////////////////////enregistrement dans la table planner///////////////////
     
    Planningmodule.Tplanning.Insert;
    Planningmodule.TCalculeheures.Insert;
    Planningmodule.Tplanning.Fields [0].AsInteger:=idcpt + 1 ;
    Planningmodule.Tplanning.Fields [1].AsInteger:=   ItemPos ;
    Planningmodule.Tplanning.Fields [2].AsInteger:=ItemEnd;
    Planningmodule.Tplanning.Fields [3].AsInteger:=ItemBegin;
    Planningmodule.Tplanning.FieldByName ('idprof').AsString:=Fnouveaucours.DBEdit1idprofs.text; //recupere la valeur id_prof
    Planningmodule.Tplanning.FieldByName ('idsalles').AsString:=Fnouveaucours.DBEditidsalles.Text;
    ////////////////Table horaire/cheures//////////////
    Planningmodule.TCalculeheures.Fields[0].AsInteger:=idcpt2+1;
    Planningmodule.TCalculeheures.Fields[1].AsDateTime:= (planner1.Items.Items[i].ItemStartTime);
    Planningmodule. TCalculeheures.Fields[2].AsDateTime:=(planner1.Items.Items[i]. ItemEndTime);
    Planningmodule. TCalculeheures.Fields[3].AsDateTime:= (Planningmodule. TCalculeheures.Fields[2].AsDateTime)- (Planningmodule. TCalculeheures.Fields[1].AsDateTime);
    Planningmodule. TCalculeheures.FieldByName ('idprof').AsString:=Fnouveaucours.DBEdit1idprofs.text         ;
    Planningmodule. TCalculeheures.FieldByName ('idTmesplanner').Asinteger:=idcpt + 1;
    //enregistrement dans la table salles_professeur////////////
    moduleProfesseur.Table1.insert;
    moduleProfesseur.Table1.Fields[0].AsInteger:=idcpt3+1;
    moduleProfesseur.Table1.Fields[1].asstring:=Fnouveaucours.DBEditidsalles.Text;
    moduleProfesseur.Table1.Fields[2].asstring:=Fnouveaucours.DBEdit1idprofs.text;;
    moduleProfesseur.Table1.Fields[3].AsInteger:=ItemPos;
    moduleProfesseur.Table1.Fields[4].AsInteger:=ItemEnd;
    moduleProfesseur.Table1.Fields[5].AsInteger:=ItemBegin;
     
     
      i:=i+1;
          end;
     
    Planner1.Items.EndUpdate;
    Planningmodule.Tplanning.Post;
    Planningmodule.TCalculeheures.Post;
    ///////////////////////recalcul des  apres insert
     
    Planningmodule.sqlcalcule.sql.clear;
     Planningmodule.sqlcalcule.sql.Text := '  select * from calcul_heures where  idprof like '+ quotedStr(Fnouveaucours.DBEdit1idprofs.text )     ;
    Planningmodule.sqlcalcule.open;
    Planningmodule.sqlcalcule.first;
     
    ccalcule:=0  ;
    while  not Planningmodule. sqlcalcule.Eof do
    begin
    ccalcule:= ccalcule + (Planningmodule.sqlcalcule.Fields[3].asdatetime);
    Planningmodule.sqlcalcule.Next;
    end;
     
     
     
     
    DateChaine := FormatDateTime(  'hh:mm',ccalcule);
    Lheures.Caption:=datechaine;
     
        end;
    Je ne suis pas sur que vous arriviez a comprendre ce que j ai fait
    En gros sur un insert du planning j ouvre une fenetre dans laquel je saisie le prof et la salle.

    de la je récupéré les valeurs id du prof et de la salle pour la mettre dans la table salle_prof ainsi que la position des items.

    Je ne suis pas sur que je mis prend bien je devrait plutôt récupérer les valeur horaires,mais je ne vois pas comme dire"si prof existe déjà dans cette plage horaire, annuler, et si salle est déjà prise dans cette plage horaire , annuler"..

    Je suis désolé, mon écriture de de programmation n 'est pas pur..

    merci
    a+
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  5. #5
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    no one
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    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 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut


    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 TFplanning.Planner1ItemInsert(Sender: TObject; Position, FromSel,
      FromSelPrecise, ToSel, ToSelPrecise: Integer);
      var
      LastNumIdPlanning
      ,LasNumIdHorraire
      ,LastNumIdProf    :integer ;
      ccalcule:variant  ;
      DateChaine: string;  //id planning+compteur table
    begin
     ////////Icrementation des table por les id planning salle_prof calcul heures/////
      Planningmodule.Tplanning.Last;   //table planning
      LastNumIdPlanning:=Planningmodule.Tplanning.Fields[0].AsInteger;  
     //compteur pour numeros unique planning
    //table calcul des heures
      Planningmodule.TCalculeheures.Last;  
      LasNumIdHorraire:=Planningmodule.TCalculeheures.fields[0].asinteger;   
    //compteur pour numeros unique calcul des heures
      moduleProfesseur.Table1.Last;/////table salles prof
      LastNumIdProf:=moduleProfesseur.Table1.Fields[0].AsInteger;
      Planner1.Items.Selected:=nil;
      Fnouveaucours.showmodal;//affiche le controle planning
    Ca corespond a quoi position ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      i:=planner1.Items.Count  ;
      if planner1.Items.HasItem(fromSel,toSel,Position) then
      begin
        ShowMessage('Cannot create item.'
        #13#10
        'Selected period already contains an item without overlap !');
        Exit;
      end;
    ici tu fait deja un test pour savoir si dans planning il existe une instance
    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
     
      Planner1.Items.BeginUpdate;
      with (Planner1.Items.Add) do
      begin
         inc(LastNumIdPlanning);
     
        Text.Add(inttostr(LastNumIdPlanning ));
        Text.Add('Professeur :'+Fnouveaucours.DBComboBoprof.Text );  
         //affiche la valeur de l'edit dans l items cree
         Text.Add('Salle : ' +Fnouveaucours.DBComboBoxsalle.Text );
        ItemPos := Position;
        ItemEnd := ToSel;
        ItemBegin := FromSel;
        CaptionType := ctTime;
        planner1.Caption.Title:=Fnouveaucours.DBComboBoxsalle.Text;
    on imagine que tu as une table TblPlanning
    alors il faut que tu fasse une requette qui verifie si il n'existe pas un enregistrement dans l'intervale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    ////////////////////////////////
    //enregistrement dans la table planner//
    /////////////////
    Planningmodule.Tplanning.Insert;
    Planningmodule.Tplanning.Fields [0].AsInteger:=LastNumIdPlanning ;
    Planningmodule.Tplanning.Fields [1].AsInteger:=ItemPos ;
    Planningmodule.Tplanning.Fields [2].AsInteger:=ItemEnd;
    Planningmodule.Tplanning.Fields [3].AsInteger:=ItemBegin;
    Planningmodule.Tplanning.FieldByName('idprof').AsString:=Fnouveaucours.DBEdit1idprofs.text; 
    Planningmodule.Tplanning.FieldByName('idsalles').AsString:=Fnouveaucours.DBEditidsalles.Text;
    le "Fnouveaucours.DBEditidsalles.Text" corrrespond a quoi ?
    moi j'aurai plus mis un horraire salle plutot qu'une salle unique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Planningmodule.Tplanning.Post;
     
    ////////////////Table horaire/cheures//////////////
    inc(LasNumIdHorraire);
    Planningmodule.TCalculeheures.Insert;
    Planningmodule.TCalculeheures.Fields[0].AsInteger:=LasNumIdHorraire;
    Planningmodule.TCalculeheures.FieldByName('idTmesplanner').Asinteger:=LastNumIdPlanning;
    Planningmodule.TCalculeheures.Fields[1].AsDateTime:=planner1.Items.Items[i].ItemStartTime;
    Planningmodule.TCalculeheures.Fields[2].AsDateTime:=planner1.Items.Items[i].ItemEndTime;
    Planningmodule.TCalculeheures.FieldByName('idprof').AsString:=Fnouveaucours.DBEdit1idprofs.text;
    // Ton Champs 3 aurait pu etre calculé
    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
     
    Planningmodule.TCalculeheures.Fields[3].AsDateTime:=Planningmodule.TCalculeheures.Fields[2].AsDateTime)- (Planningmodule.TCalculeheures.Fields[1].AsDateTime);
    Planningmodule.TCalculeheures.Post;
     
     
     
    //enregistrement dans la table salles_professeur
    ////////////
    inc(LastNumIdProf);
    moduleProfesseur.Table1.insert;
    moduleProfesseur.Table1.Fields[0].AsInteger:=LastNumIdProf;
    moduleProfesseur.Table1.Fields[1].asstring:=Fnouveaucours.DBEditidsalles.Text;
    moduleProfesseur.Table1.Fields[2].asstring:=Fnouveaucours.DBEdit1idprofs.text;;
    moduleProfesseur.Table1.Fields[3].AsInteger:=ItemPos;
    moduleProfesseur.Table1.Fields[4].AsInteger:=ItemEnd;
    moduleProfesseur.Table1.Fields[5].AsInteger:=ItemBegin;
    moduleProfesseur.Table1.Post;
    pour ce module j'aurai plutot mis la cle
    LastNumIdPlanning a la place des different itemPos,ItemEnd
    ainsi que la cle Horaire_Salle

    je trouve que tes elements sont rededant et c'est dificilement comprehensible
    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
     
     i:=i+1;
    end;
     
    Planner1.Items.EndUpdate;
     
    ///////////////////////recalcul des  apres insert
     
    Planningmodule.sqlcalcule.sql.clear;
     Planningmodule.sqlcalcule.sql.Text := '  select * from calcul_heures where  idprof like '+ quotedStr(Fnouveaucours.DBEdit1idprofs.text )     ;
    Planningmodule.sqlcalcule.open;
    Planningmodule.sqlcalcule.first;
     
    ccalcule:=0  ;
    while  not Planningmodule. sqlcalcule.Eof do
    begin
    ccalcule:= ccalcule + (Planningmodule.sqlcalcule.Fields[3].asdatetime);
    Planningmodule.sqlcalcule.Next;
    end;
     
      DateChaine := FormatDateTime(  'hh:mm',ccalcule);
      Lheures.Caption:=datechaine;
      end;
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #7
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    bonjour

    merci pour la réponse.

    position c'est un emplacement dans le calendriers..
    en fait le calendrier de tms est grid modifiefier,donc d apres mes déductions et pour pouvoir replacer un items calendriers, il me fallait ca position dans le tableau,son debut et ca fin..
    avec les horaires ca ne marchais pas..

    Pour le test il ne marche pas en fait j ai fais un simple copier coller d un code exemple mais j ai pas supprimer ca et pas tester effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    i:=planner1.Items.Count  ;
      if planner1.Items.HasItem(fromSel,toSel,Position) then
      begin
        ShowMessage('Cannot create item.'
        #13#10
        'Selected period already contains an item without overlap !');
        Exit;
      end;


    Fnouveaucours.DBEditidsalles.Text correspond à l' id de la salles pour le mettre dans la table planning


    je sais que c'est redondant mais j ai deja eu tellement de mal a pourvoit incrir un planning dans une table..
    Pour le champs calculer je connais pas je vais faire des recherches

    Je vais cloture et remettre ca plus propre, je ne souhaite pas faire perdre du temps a qui que se soit, parce que mon code est broullion, par contre si tu veux les sources y a pas de probleme

    a+

    merci pour l aide
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  8. #8
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    re

    J ai oublie une chose j ai du faire de la bidouille pour qu il soit possible d enregistre un planning dans une table..

    le composant n'est pas prevu pour ca a la base...
    a+
    merci encore
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

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

Discussions similaires

  1. Tester tous les cas de présence ou non de 3 chaînes dans un fichier !
    Par bras39 dans le forum Shell et commandes GNU
    Réponses: 27
    Dernier message: 14/11/2011, 01h40
  2. Réponses: 10
    Dernier message: 15/03/2009, 14h52
  3. Réponses: 11
    Dernier message: 07/02/2009, 01h31
  4. Réponses: 4
    Dernier message: 24/04/2007, 21h58
  5. Réponses: 11
    Dernier message: 02/04/2004, 18h33

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