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

FLTableMetaData * FLManager::metadata ( const QString &  n  )  [static]

Para obtener definicion de una tabla de la base de datos, a partir de un fichero XML.

El nombre de la tabla corresponde con el nombre del fichero mas la extensión ".mtd" que contiene en XML la descripción de la tablas. Este método escanea el fichero y construye/devuelve el objeto FLTableMetaData correspondiente, además realiza una copia de estos metadatos en una tabla de la misma base de datos para poder determinar cuando ha sido modificados y así, si es necesario, reconstruir la tabla para que se adapte a la nuevos metadatos. NO SE HACEN CHEQUEOS DE ERRORES SINTÁCTICOS EN EL XML.

IMPORTANTE : Para que estos métodos funcionen correctamente, es estrictamente necesario haber creado la base de datos con codificación UNICODE; "createdb -E UNICODE facturalux".

Parameters:
n Nombre de la tabla de la base de datos de la que obtener los metadatos
Returns:
Un objeto FLTableMetaData con los metadatos de la tabla solicitada

Definition at line 808 of file FLManager.cpp.

References alterTable(), checkMetaData(), createTable(), and existsTable().

Referenced by alterTable(), checkMetaData(), createSequence(), createTable(), FLSqlCursor::FLSqlCursor(), FLTableDB::initCursor(), and FLFieldDB::initCursor().

{
  QDomDocument doc (n);
  QFile fi (FLDATA "/facturalux/tables/" + n + ".mtd");
  QDomElement docElem;

  if (!fi.open (IO_ReadOnly))
      {
        fi.close ();
        qWarning ("FLManager : " + qApp->tr ("Los meta datos para ") + n + qApp->tr (" no están definidos"));
        return 0;
      }
  QTextStream t (&fi);
  QString stream = t.read ();
  fi.close ();

  if (!existsTable ("flmetadata"))
      {
        fi.setName (FLDATA "/facturalux/tables/flmetadata.mtd");
        if (!fi.open (IO_ReadOnly))
            qWarning ("FLManager : " + qApp->tr ("Los meta datos para flmetadata no están definidos"));
        else
            {
              t.setDevice (&fi);
              if (!doc.setContent (t.read ()))
                  qWarning ("FLManager : " + qApp->tr ("Error al cargar los meta datos para flmetadata"));
              else
                  {
                    docElem = doc.documentElement ();
                    if (!createTable (metadata (&docElem)))
                        return 0;
                  }
            }
      }

  QSqlCursor c ("flmetadata");
  QSqlRecord *buffer;
  c.setFilter ("tabla='" + n + "'");
  c.select ();
  if (!c.next ())
      {
        buffer = c.primeInsert ();
        buffer->setValue ("tabla", n);
        buffer->setValue ("xml", stream);
        buffer->setValue ("bloqueo", false);
        c.insert ();
      }
  else
      {
        buffer = c.primeUpdate ();
        if (buffer->value ("bloqueo").toBool ())
            {
              QMessageBox::warning (qApp->mainWidget (),
                                                qApp->tr ("Tabla bloqueada"),
                                                qApp->tr ("La tabla ") + n + qApp->tr (" está bloqueada, puede ser que ahora se esté ajustando su\n") +
                                                qApp->tr ("estructura por modificaciones.\n\nInténtelo más tarde, y si el bloqueo ") +
                                                qApp->tr ("persiste consulte\nal administrador del sistema.\n"), QMessageBox::Ok, 0, 0);
              return 0;
            }

        QString s = buffer->value ("xml").toString ();
        if (!checkMetaData (s, stream))
            {
              buffer->setValue ("bloqueo", true);
              c.update ();
              buffer = c.primeUpdate ();
              if (alterTable (s, stream))
                  buffer->setValue ("xml", stream);
              buffer->setValue ("bloqueo", false);
              c.update ();
            }
      }

  if (!doc.setContent (stream))
      {
        qWarning ("FLManager : " + qApp->tr ("Error al cargar los metadatos para ") + n);
        return 0;
      }

  docElem = doc.documentElement ();
  FLTableMetaData *ret = metadata (&docElem);
  return ret;
}


Generated by  Doxygen 1.6.0   Back to index