ComboBox et erreur de date...

ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011 - 5 août 2010 à 02:06
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 - 5 août 2010 à 14:29
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

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
5 août 2010 à 10:33
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+
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
5 août 2010 à 10:43
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
0
ichigoZ710 Messages postés 55 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 15 novembre 2011
5 août 2010 à 10:47
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 :/
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
5 août 2010 à 11:02
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+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
5 août 2010 à 14:29
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
0
Rejoignez-nous