Leer Metadatos

Iniciado por nolasco281, 2 Agosto 2014, 11:46 AM

0 Miembros y 1 Visitante están viendo este tema.

nolasco281

Hola como estan

Quisiera saber si es posible crear una BD por xml es decir

tengo lo siquiente.

Escribo esto en mi aplicacion.

Código (xml) [Seleccionar]
<NewDB>Crear BD</NewDB>
Código (xml) [Seleccionar]
<TablaDB>Crea nueva tabla BD</TablaDB>

Por medio de lo de arriba me deberia de crear una base de datos una tabla etc.. ya sea en SQL o mySQL.

Bueno el punto es que debo de leer, investigar. se la estructura basica de xml pero debo de ver la metadata de la BD para poder crearla por xml estoy algo perdido ahi.



Espero puedan orientarme un poco.

Muchas gracias.
Lo que se puede imaginar... se puede programar.

eferion

Crear una tabla es algo bastante más complejo. Hay que indicar también qué campos hay, que nombre tienen, de qué tipo es cada campo y ajustar algúnas configuraciones adicionales (longitud de los caracteres, si es clave primaria, campos que se autoincrementan ). Luego aparte también se suelen configurar reglas de acceso o disparadores ( para trabajar con tablas relacionales )....

Vamos, que por poder, sí prodrías conseguirlo, pero vas a tener que añadir más profundidad a esa etiqueta :)

nolasco281

#2
No claro la etiqueta que esta ahi es solo un ejemplo.

si no ando mal debo de crear una clase que me maneje el codigo de creacion de la BD tablas entre otros y que al momento de crear el xml me tome el formato de la BD es decir.



por medio del xml se creara la BD o Tables etc..

esa es la parte que no entiendo, alguna idea.

Lo que se puede imaginar... se puede programar.

eferion

Suponiendo que tuvieses algo del tipo

Código (xml) [Seleccionar]

<?xml version="1.0" encoding="UTF-8"?>
<NewTable name="nueva_tabla">
  <cols>
    <col>
      <name>columna1</name>
      <dataType>int</dataType>
     </col>
  </cols>
</NewTable>


Tendrías que leer el XML y, simplificando, seguir el siguiente esquema. Nota que el código es una especie de pseudocódigo... el código final dependerá de la clase que uses para leer el XML.

Código (cpp) [Seleccionar]

XmlReader reader( fichero );

while ( reader.NextNode( ) )
{
  if ( reader.CurrentNode( ).Name( ) == "NewTable" )
    NewTable( reader );
}

void NewTable( XmlReader& reader )
{
  std::string tableName = reader.CurrentNode( ).Attribute( "name" ); // Recuperamos 'nueva_tabla'
  std::vector< DBCol > columns;

  while ( reader.NextNode( ) )
  {
    if ( reader.CurrentNode( ).Name( ) == "cols" )
      columns = ReadColumns( reader );
  }

  std::string sql = "CREATE TABLE " + tableName + " (";

  for ( const auto& col : columns )
  {
    sql += col.Name( ) + ...
  }
  sql += ")";
   
  // Solo falta ejecutar la sentencia SQL
}

void ReadColumns( XmlReader& reader )
{
  std::vector< DBCol > columns;

  while ( reader.NextNode( ) )
  {
    if ( reader.CurrentNode( ).Name( ) == "col" )
      columns.push_back( ReadColumn( reader );
  }

  return columns;
}

void ReadColumn( XmlReader& reader )
{
  DBCol column;

  while ( reader.NextNode( ) )
  {
    if ( reader.CurrentNode( ).Name( ) == "name" )
      column.SetName( reader.CurrentNode( ).ReadText( ) ); // Nombre de la columna
    else if ( reader.CurrentNode( ).Name( ) == "dataType" )
      column.SetType( reader.CurrentNode( ).ReadText( ) );
  }

  return column;
}


nolasco281

Hola primeramente

Mil gracias me acabas de aclarar muchas de las dudas que tenia.

estare molestando en el transcurso de estos dias. y en el desarrollo de mi codigo.

Saludos y muchas gracias de nuevo se te agradece mucho el tiempo que se tomo.  ;-)
Lo que se puede imaginar... se puede programar.