Logo Search packages:      
Sourcecode: facturalux version File versions  Download package

bool FLSqlCursor::commitBuffer (  )  [slot]

Manda el contenido del buffer al cursor, o realiza la acción oportuna para el cursor.

Todos los cambios realizados en el buffer se hacen efectivos en el cursor al invocar este método. La manera de efectuar estos cambios viene determinada por el modo de acceso establecido para el cursor, ver FLSqlCursor::Mode, si el modo es editar o insertar actualiza con los nuevos valores de los campos del registro, si el modo es borrar borra el registro, y si el modo es navegacion no hace nada. Antes de nada tambien comprueba la integridad referencial invocando al método FLSqlCursor::checkIntegrity().

Returns:
TRUE si se ha podido entregar el buffer al cursor, y FALSE si ha fallado la entrega.

Definition at line 460 of file FLSqlCursor.cpp.

References FLManager::action(), action_, BROWSE, buffer_, FLFieldMetaData::calculated(), checkIntegrity(), cursorRelation, cursorUpdated(), del(), DEL, EDIT, FLTableMetaData::field(), FLRelationMetaData::field(), FLTableMetaData::fieldList(), FLRelationMetaData::foreignField(), FLManager::formatValue(), FLInterface::getReceiver(), INSERT, FLAction::masterProcess(), metadata_, modeAccess_, FLFieldMetaData::name(), FLTableMetaData::name(), FLTableMetaData::primaryKey(), relation, setValueBuffer(), and valueBuffer().

Referenced by FLFormRecordDB::accept(), FLFormRecordDB::acceptContinue(), insertRecord(), and openFormInMode().

{
  if (!buffer_ || !metadata_)
      return false;

  if (!checkIntegrity ())
      return false;

  QVariant
      pK =
      valueBuffer (metadata_->primaryKey ());

  switch (modeAccess_)
      {
      case INSERT:
        if (cursorRelation && relation)
            setValueBuffer (relation->field (), cursorRelation->valueBuffer (relation->foreignField ()));
        insert (FALSE);
        break;

      case EDIT:
        update (FALSE);
        break;

      case DEL:
        del (FALSE);
        emit
        cursorUpdated ();
        break;

      case BROWSE:
        break;
      }

  QString
      sql =
      QString::null;

  if (!action_)
      action_ = FLManager::action (metadata_->name ());
  FLReceiver *
      r =
      FLInterface::getReceiver (action_->masterProcess ());

  if (r && (modeAccess_ == EDIT || modeAccess_ == INSERT))
      {
        FLTableMetaData::FLFieldMetaDataList * fieldList = metadata_->fieldList ();
        FLFieldMetaData *
            field;
        r->setCursor (this);

        for (unsigned int i = 0; i < fieldList->count (); i++)
            {
              field = fieldList->at (i);
              if (field->calculated ())
                  {
                    QVariant
                        v =
                        r->
                        calculateField (field->name ());

                    sql =
                        "UPDATE " + metadata_->name () + " SET " +
                        field->name () + "=" +
                        FLManager::formatValue (field, v) + " WHERE " +
                        metadata_->primaryKey () + "=" + FLManager::formatValue (metadata_->field (metadata_->primaryKey ()), pK) + ";";
                    QSqlQuery
                    q (sql);
                  }
            }
      }

  modeAccess_ = BROWSE;

  if (r)
      delete
        r;

  return true;
}


Generated by  Doxygen 1.6.0   Back to index