ComboBox et erreur de date...

Signaler
Messages postés
55
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
15 novembre 2011
-
Messages postés
265
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 juillet 2021
-
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 :
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;


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

Merci.

5 réponses

Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Salut,

si ton champ est un type Date, tu dois écrire "ADOQuery1.Fields.Fields[1].AsDateTime"

Mais comme tu fais une addition, je suppose que le champ ne garde que le mois ...
Impossible de t' aider plus si tu n' informes pas quel est le type de données de tes champs ...

A+
Messages postés
55
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
15 novembre 2011

Ma BDD est sous acces, et si c'est des champs de ma BDD que tu parle alors le champ contenu dans la colonne Djourn est de type Date. Après j'extrais uniquement les mois et les années de ce champs en les placant dans deux colonnes fictives (mois et annee). Une fois dans ces 2 colonne je récupère le contenu de chaque champs pour les afficher dans ma combobox en les concaténant en gros.

Je peux pas mettre .AsDateTime au lieu de integer car il me sort l'erreur suivant : "cannot acces to the field 'mois' AsDateTime"

Le format de mes 2 colonnes fictives créées m'est inconnu car je les créées juste pour y placer des données "temporaires" donc pas de type particulier enfin ils me semble pas que je puisse le forcer...

P.S : indulgence trop longtemps que j'ai pas pratiquer sur de la BDD via delphi et access donc je suis un peu perdu :x
Messages postés
55
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
15 novembre 2011

Après si tu as une autre technique pour récupérer juste le mois et l'année en les plaçant dans ma combobox de façon à avoir une ligne pour chaque mois année :
juillet 2010
aout 2010
...
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

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 :/
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
J' ai pas tout compris, en tout cas le code suivant n' est pas bon:
dte := ADOQuery1.Fields.Fields[0].AsInteger + ADOQuery1.Fields.Fields[1].AsInteger;

Tu peux toujours utiliser Encodedate() pour créer la date de ton enregistrement.
Ensuite, le reste de ton code semble correct.

A+
Messages postés
265
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 juillet 2021
13
Salut,
type
    ODBCDateTimeFormats = ( FormatDate, FormatHeure, FormatDateHeure);

//Fonction pour mettre date et heure au format sql
function DateTimeToODBCDatetime(DateTime: TDateTime; Format: ODBCDateTimeFormats):string;
begin
    case Format of
        FormatDate : Result := #123' d ' +QuotedStr(FormatDateTime('yyyy-mm-dd',DateTime))+'}';
        FormatHeure: Result := #123' t ' +QuotedStr(FormatDateTime('hh:nn:ss',DateTime))+'}';
        FormatDateHeure : Result := #123' ts '+QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss',DateTime))+'}';
    end;
end;

procedure ...
begin
    ...
    ADOQuery1.Close;
    ADOQuery1.SQL.Text:='SELECT Table.DJourn FROM Table WHERE (DJourn > '+DateTimeToODBCDatetime(StrToDateDef('31/07/2010',Now),FormatDate)+
        ' AND DJourn < '+DateTimeToODBCDatetime(StrToDateDef('01/09/2010',Now),FormatDate)+')';
    ADOQuery1.Open;
    ...
end;

Retourne les dates d'août.

@+yanb