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

Bases de données Delphi Discussion :

ComboBox + SQL(Access) + DateTime


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Par défaut ComboBox + SQL(Access) + DateTime
    Bonjour,
    J'ai un problème avec une combo box qui doit être remplie de date au format : mois année (Juillet 2010) mais lors de son remplissage mes dates sont toujours fausses et il m'affichent :
    Juillet 1905 peu importe le mois de départ c'est toujousr juillet 1905 qui apparait...

    Voici mon code :
    Code Delphi :
    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
    ComboBoxCaisse.Items.Clear;
      ADOQuery1.Close;
      ADOQuery1.SQL.Text := 'SELECT DISTINCT MONTH(Djourn) AS mois, YEAR(Djourn) AS annee FROM caisse';
      ADOQuery1.Open;
      ADOQuery1.First;
     
      while not ADOQuery1.Eof do
      begin
        dte := ADOQuery1.Fields.Fields[0].AsInteger + ADOQuery1.Fields.Fields[1].AsInteger;
        Showmessage(DateToStr(dte));
        Showmessage(ADOQuery1.Fields.Fields[0].AsString + '/' + ADOQuery1.Fields.Fields[1].AsString);
        ComboBoxCaisse.Items.Add(FormatDateTime('mmmm yyyy',dte);
        ADOQuery1.Next;
      end;
      ADOQuery1.Close;
    Je peux pas mettre .AsDateTime au lieu de .AsInteger car il me sort l'erreur suivant : "cannot acces to the field 'mois' AsDateTime"

    Si vous avez une autre méthode je suis preneur, sachant que dans ma base de donnée le champ Djourn est de la forme :
    jj/mm/yyyy
    et qu'il peut y avoir des doublons de journée du genre :
    30/07/2010
    30/07/2010
    et que dans ma comboBox seul le mois et l'année doivent être affichée de facon unique pour chaque combinaison.

    Ma combobox me permet de mettre a jour une grid en n'affichant que les journée correspondant au mois et à l'année sélectionnés dans ma combobox.

    En espérant avoir été clair :/

    Si quelqu'un pouvait éclairer ma lanterre sur le pourquoi du comment de l'erreur de calcul de ma date ou d'affichage :/

    Merci.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Oula, plein d'erreur dans ton 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
    24
    25
    26
    27
    28
     
    var
      sTmp : String;
    begin
    ComboBoxCaisse.Items.Clear;
      ADOQuery1.Close;
      ADOQuery1.SQL.Text := 'SELECT DISTINCT MONTH(Djourn) AS mois, YEAR(Djourn) AS annee FROM caisse';
      ADOQuery1.Open;
      ADOQuery1.First;
     
      while not ADOQuery1.Eof do
      begin
      // Inutile deplus si tu fais l'addition tu ajoutes le mois et l'année
       // dte := ADOQuery1.Fields.Fields[0].AsInteger + ADOQuery1.Fields.Fields[1].AsInteger;
    //    Showmessage(DateToStr(dte));
    //    Showmessage(ADOQuery1.Fields.Fields[0].AsString + '/' + ADOQuery1.Fields.Fields[1].AsString);
    // Le format datetime ne te sert à rien la, deplus comme ta données est fausse
    //    ComboBoxCaisse.Items.Add(FormatDateTime('mmmm yyyy',dte);
    // Ca serait mieux comme çà
    sTmp := ADOQuery1.FieldByName('mois').AsString + '/' + ADOQuery1.FieldByName('annee').AsString;
    // Si la date n'existe pas déjà alors on va l'ajouter
    if ComboBoxCaisse.Items.IndexOf(sTmp) = -1 then
      ComboBoxCaisse.Items.Add(sTmp);
     
        ADOQuery1.Next;
      end;
      ADOQuery1.Close;
    end;
    Pour les doublons j'ai fait une méthode simple mais tu peux faire un Group By dans la requête et tu n'auras pas besoin de faire le teste d'existence


    Il y a peut être des erreurs mais l'idée est la
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Par défaut
    Etant au travail je ne peux pas trop me pencher dessus.
    Mais j'avais penser a un encodedate() En lieu et place de tout mon bazar.

    Pourquoi n'ais-je pas pensé à l'addition, je me suis borné sur le faites que cela faisait une concaténation des 2 valeurs (va savoir pourquoi -_-)

    Mais j'avoue que ta réponse est vraiment bien également

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par byakuichi Voir le message
    Mais j'avais penser a un encodedate() En lieu et place de tout mon bazar.
    Pourquoi rajouter une couche ?
    Si tu encodes le mois et l'année, va falloir que tu le convertisses encore après la date, alors que tu as directement avec ta requête le mois et l'année
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 80
    Par défaut
    c'était avant ta proposition et à 2h30 du matin donc je commençais à plus trop avoir les idées claires ^^"

    Je me complique souvent la vie alors que certaines choses peuvent être résolues de façon fort simple !

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/05/2005, 08h19
  2. [SQL - Access] Valeur par défaut d'un champs
    Par Demiurge dans le forum Access
    Réponses: 2
    Dernier message: 11/02/2005, 17h16
  3. [SQL/access] Doublon sur un champ
    Par kor dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/01/2005, 11h21
  4. [SQL Access] Modifier la structure d'une table
    Par Le Lézard dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/06/2004, 14h03
  5. [SQL][ACCESS]Compter le nombres d'enregistrement dans deux..
    Par pc152 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/06/2004, 12h30

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