2010-07-28 4 views
2

Я использую Delphi 2006 и ADO для подключения к базе данных MS Access. Некоторые из полей I извлекаемых являются Поля даты (в Access отформатированный как «Medium Date», то есть 20-апреля-2010), однако, я должен получить их в качестве строк:Delphi & ADO: datetime to string conversion

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

, а затем поля в следующем формате: 4/20/2010.

Мой вопрос: когда это форматирование происходит и как его настроить? Являются ли это настройками ADO (ничего не могу найти) или ОС (я использую Win XP ENG с US locale)? Или, может быть, это Дельфы?

Спасибо! Lou

+1

Если вы получаете 4/20/2010, то есть то, что просит региональные настройки пользователя для. Это будет то же самое, что и подробный вид в проводнике Windows. В идеале вы должны соблюдать (или соблюдать) настройки, если только вы не создаете ввод для другой системы, которая ожидает определенный формат. Региональные настройки настраиваются в разделе «Региональные и языковые» панели управления (в XP). Однако в Win7 есть известная ошибка, которая вызывает проблемы с этим. См. Http://blogs.msdn.com/b/michkap/archive/2010/03/19/9980203.aspx –

ответ

0

Хорошо, только что нашел. Это общие параметры Дельфах (если отсутствует, то значения берутся из ОС):

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

и теперь возвращается значение «20-апреля-2010».

0

Вы можете извлечь значение как DateTime и использовать эту функцию, чтобы преобразовать его в формат

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

в ShortDateFormat и LongTimeFormat переменные используются для форматирования TDateTimeField в строку.

вы можете изменить значение переменных тезисов или попробовать что-то другое, как это:

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

Я думаю, что порядок параметров функции FormatDateTime был неправильным;) – SimaWB

+0

@SimaWB, вы правы, исправлены Теперь. – RRUZ