2010-07-28 5 views
2

J'utilise Delphi 2006 et ADO pour me connecter à une base de données MS Access. Certains des champs que je Retrieve, sont des champs de date (dans Access format comme « date moyen », à savoir 20-Apr-2010) mais je dois les récupérer sous forme de chaînes:Delphi et ADO: conversion datetime en chaîne

FValue:=FAccessADOQuery.Fields.FieldByName(FIELD_NAME).AsString; 

et les champs sont formatés comme suit: 20/04/2010.

Ma question est: quand cette mise en forme a-t-elle lieu et comment puis-je la personnaliser? Est-ce que les paramètres ADO (n'ont rien trouvé là-bas) ou le système d'exploitation (j'utilise Win XP ENG avec les paramètres régionaux américains)? Ou peut-être que c'est Delphi?

Merci! Lou

+1

Si vous obtenez 20/04/2010, c'est-ce que les paramètres régionaux de l'utilisateur demande. Ce sera la même chose que la vue détaillée dans Windows Explorer. Idéalement, vous devriez honorer (ou honorer) les paramètres, sauf si vous créez une entrée pour un autre système qui attend un format particulier. Les paramètres régionaux sont définis dans la section "Régional et Langue" du panneau de configuration (sous XP). Cependant, il existe un bogue connu dans Win7 qui cause des problèmes avec ceci. Référez http://blogs.msdn.com/b/michkap/archive/2010/03/19/9980203.aspx –

Répondre

0

Ok, je l'ai trouvé. Il est delphi les paramètres généraux (si elle est manquante alors les valeurs sont prises à partir du système d'exploitation):

DateSeparator := '-'; 
ShortDateFormat := 'dd-mmm-yyyy'; 

Et maintenant, la valeur retournée est « 20-Apr-2010 ».

0

Vous pouvez retreive la valeur DATETIME et utiliser cette fonction pour convertir au format de votre

FValue:=FAccessADOQuery.Fields.FieldByName(FIELD_NAME).AsDateTime;

function DateToMediumDate(const Date: TDate): string; 
var 
    y, m, d: Word; 
begin 
    DecodeDate(Date, y, m , d); 

    Result := Format('%d-%s-%d', [d, ShortMonthNames[m], y]); 
end; 
2

les variables ShortDateFormat et LongTimeFormat sont utilisés pour formater une TDateTimeField à chaîne.

vous pouvez modifier la valeur des variables de thèses ou d'essayer quelque chose de différent comme celui-ci:

Dt :TDateTime; 
Ds :String; 
begin 
//FAccessADOQuery.Fields.FieldByName(FIELD_NAME).AsString 
Dt:=FAccessADOQuery.Fields.FieldByName(FIELD_NAME).AsDateTime; 
Ds:=FormatDateTime('dd-mmm-yyyy',dt); 
end; 
+0

Je pense que l'ordre des paramètres de la fonction FormatDateTime était faux;) – SimaWB

+0

@SimaWB, vous avez raison, corrigé à présent. – RRUZ