Показать сообщение отдельно
Старый 23.04.2009, 17:29   #31  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Пользуясь сегодняшнем случаем наконец-то подправил в своем рабочем классе (практически в персональном "пролетариате") метод, устанавливающий значение в поле рекордсета:
X++:
#CCADO
void setValue(anytype _fldName, anytype _fldValue)
{
    // _fldName - можно текстовое имя, а можно числовое, начиная с 1 (!), а не 0 как в самом ADO
    anytype fldName;
    ;
    if (typeof(_fldName)==Types::Integer)
        fldName = _fldName - 1;
    else
        fldName = _fldName;     

    fld = flds.Item(fldName); // COM flds и fld - полЯ и полЕ рекордсета, определены в Class Declaration

    if (! ((fld.Type()==#adDate || fld.Type()==#adDBDate) && !_fldValue) )
    {
        fld.Value(_fldValue); // если непустая дата или любое др.значение
    }
    // иначе если значение - пустая дата, то вообще не прописываем в поле
}
И теперь можно не обращать внимание на дату. А раньше приходилось делать проверку в самом цикле вывода:
X++:
if (ltDb.TransDate)
    out2xls.setValue(nextNum(),ltDb.TransDate);
Способ с проверкой в цикле, конечно, побыстрее будет, но вряд ли этот временнОй выигрыш так уж критичен, а по сему упрятывание обработки пустой даты в метод setValue выглядит комфортнее.