Re[3]: Подскажите побыстрому - объявить переменную в if как?
От: K13 http://akvis.com
Дата: 02.03.21 06:59
Оценка: +1
M>Вроде смог сформулировать в коде, но в один if не понял как затолкать всё:

я бы делал обертки, возвращающие std::pair из самого результата и флага bool или даже std::optional

// тут я не в курсе, что там за типы
std::optional<QUERY_RES_TYPE> execHelperWrapper( DB_MGR *db, const QString& query )
{
    bool ok = false;
    auto qr = db->execHelper( query, &ok );
    return ok ? qr : std::nullopt;
}

std::optional<QString> selectFirstFieldOfFirstRowAsString( DB_MGR *db, const QString& query )
{
    auto qr = execHelperWrapper( db, query );
    if ( !qr )
        return std::nullopt;

    auto resVec = db->selectFirstResultToSingleStringVector( qr.value() );
    return !resVec.empty() ? resVec.front() : std::nullopt;
}

QDateTime dateTimeFromDbStringWrapper( std::optional<QString> s )
{
    QDateTime res;
    if ( s )
        res = dateTimeFromDbString( s.value() );
    return res;
}


и тогда получается

QDateTime dtLastDate = dateTimeFromDbStringWrapper( selectFirstFieldOfFirstRowAsString( pDbMan, selectLastDateQueryText ) );

if (dtLastDate.isNull() || !dtLastDate.isValid())
{
    // пытаемся получить dtLastDate ещё как-то
}

if (dtLastDate.isNull() || !dtLastDate.isValid())
{
    // Вот тут уже мы поняли точно, что всё пошло не так
    continue;
}

// Ду Гуд Жоб Хере
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.