/** Sets the data for the all calculated fields - list size must number of calculated fields */ void MReportSection::setCalcFieldData( QPtrList < QMemArray < double > > *values, QValueVector < QString > *valueS, QDomNode *record ) { MCalcObject * field; int i = 0; int calcType; QString value = ""; // Calculate and set the calculated field's data for ( field = calculatedFields.first(); field != 0; field = calculatedFields.next() ) { if ( field->getFromGrandTotal() ) continue; calcType = field->getCalculationType(); if ( calcType == MCalcObject::NoOperation ) { if ( valueS ) value = ( *valueS )[ i ]; calculateField( field, 0, value, record ); } else if ( calcType == MCalcObject::CallFunction ) { calculateField( field, 0, value, record ); } else { if ( values ) calculateField( field, values->at( i ), value, record ); } i++; } }
void Q3SqlCursor::sync() { if (isActive() && isValid() && d->lastAt != at()) { d->lastAt = at(); int i = 0; int j = 0; bool haveCalculatedFields = false; for (; i < count(); ++i) { if (!haveCalculatedFields && d->infoBuffer[i].isCalculated()) { haveCalculatedFields = true; } if (QSqlRecord::isGenerated(i)) { QVariant v = QSqlQuery::value(j); if ((v.type() == QVariant::String) && d->infoBuffer[i].isTrim()) { v = qTrim(v.toString()); } QSqlRecord::setValue(i, v); if (QSqlQuery::isNull(j)) QSqlRecord::field(i).clear(); j++; } } if (haveCalculatedFields) { for (i = 0; i < count(); ++i) { if (d->infoBuffer[i].isCalculated()) QSqlRecord::setValue(i, calculateField(fieldName(i))); } } } }
/** Sets the data for the calculated fields whose calculation source is the grand total */ void MReportSection::setCalcFieldDataGT( QPtrList < QMemArray < double > > *values, MReportSection *rFooter, QValueVector < QString > *valueS, QDomNode *record ) { MCalcObject * field; int grandTotalIndex = 0; // Calculate and set the calculated field's data for ( field = calculatedFields.first(); field != 0; field = calculatedFields.next() ) { if ( !field->getFromGrandTotal() && level > -1 ) continue; grandTotalIndex = rFooter->getCalcFieldIndex( field->getFieldName() ); if ( grandTotalIndex != -1 ) { calculateField( field, values->at( grandTotalIndex ), "", record ); } } }