none
crear tabla con columnas a partir de un ciclo RRS feed

  • Pregunta

  • Hola a todos, quisiera saber cómo puedo crear una tabla con columnas  con un ciclo (creo que con un for), y llenarla con datos tomados de un dataset que contiene la información de un archivo xml

    Gracias de antemano por su ayuda


    • Editado black_j jueves, 23 de octubre de 2014 13:53
    • Cambiado Enrique M. Montejo lunes, 27 de octubre de 2014 7:16 Pregunta relacionada con objetos de acceso a datos.
    jueves, 23 de octubre de 2014 13:38

Todas las respuestas

  • Bien, vayamos por partes. Crear una tabla, ¿DÓNDE? ¿En un servidor de base de datos relacional? ¿De qué tipo? ¿Es un SQL Server? En ese caso, la tabla se crea transmitiéndole al servidor mediante un SqlConnection y un SqlCommand una sentencia SQL del tipo "CREATE TABLE ....", que dentro del texto especifica las columnas a crear.

    Antes de ponerte a programar nada, primero asegúrate de que sabes construir manualmente la sentencia correcta, tecleando el CREATE TABLE desde las herramientas administrativas del servidor y cerciorándote de que has escrito correctamente la declaración de cada columna y el servidor crea la tabla de acuerdo con ellas.

    Una vez que ya sepas cuál es la sintaxis del CREATE TABLE, basta con que te fijes en que se trata de un simple string que tu programa envía al servidor. Primero haz la prueba con un programa simple, que contenga la sentencia escrita "a piñón fijo" entre comillas, y envíala a tu servidor de base de datos mediante el método ExecuteNonQuery de un SqlCommand. Cerciórate de que la ejecuta bien sin dar ningún error, y así sabrás que tienes bien escrita la cadena de conexión al servidor, las credenciales, etc.

    Después de eso, es el momento de tomar tu dataset, recorrer su colección de Columns, y por cada columna concatenar en un string las características de la columna, de tal manera que después de terminar con todas las columnas el string tenga la misma estructura que el string que antes probaste a mano y que sabes que funciona para crear la tabla. Verifica con el debugger que el string que has construído con el bucle efectivamente tiene la sintaxis correcta. Si es necesario, cópialo desde el debugger y pégalo en las herramientas del servidor para verificar que la base de datos lo acepta sin errores.

    Finalmente, ya lo tienes todo. Toma el string que ha salido del bucle anterior y pásaselo al mismo SqlCommand donde antes probaste la cadena fija para crear la tabla, y al ejecutarlo todo junto se creará una tabla conforme con las columnas que había en el DataSet.

    Editado: Esa era la parte difícil (crear la tabla). Si después necesitas pasarle los registros de datos, eso puedes hacerlo con pocas líneas de código empleando un simple DataAdapter. Pero primero concéntrate en la creación de la tabla, que es lo más complicado, y luego si es preciso pregunta por la carga de registros de datos.


    jueves, 23 de octubre de 2014 14:56
  • Hola,muchas gracias por contestar, no estoy haciendo nada con sql, sino que tengo un archivo xml y su contenido quiero que aparezca en un ultragrid.

    así asigno el archivo al dataset:

    Dim dsxml As New DataSet()
                     xmlFile = XmlReader.Create("archivo.xml", New XmlReaderSettings())
                      dsxml.ReadXml(xmlFile)

    lo que hago que las columnas las creo manualmente:

    Dim DataTable_xml As DataTable = New DataTable("tabla")

     

    Dim col1 As New DataColumn("Campo1")
    Dim col2 As New DataColumn("Campo2")

    hasta n 

    DataTable_xml.Columns.Add(col1)

    DataTable_xml.Columns.Add(col1)

    hasta n

    depues esto me sirve para que muestre los campos que yo elija del xml al ultragrid

    Dim drow As DataRow
            drow = DataTable_xml.NewRow

    drow.Item("Campo1") = dsxml.Tables("tabla_del_xml").Rows(0).Item("Campo1_del_xml")

    drow.Item("Campo2") = dsxml.Tables("tabla_del_xml").Rows(0).Item("Campo2_del_xml")

    hasta n

    GridResultado.DataSource = DataTable_xml

    Lo que necesito es que lo que contiene el dataset lo vaya asignando a las columnas de una tabla que se cree con un ciclo para no construir todo a mano porque son demasiadas columnas que contiene el xml. 

    Espero haberme explicado y gracias por su ayuda

    jueves, 23 de octubre de 2014 15:16
  • Hola:
    Si tienes un fichero xml con los datos y quieres cargarlo en un DataGridView.
    En un Form con 1 DataGridView, copia y pega el siguiente codigo

    Public Class Form1

        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Dim moDataSet As New DataSet
            'Leo el fichero xml
            moDataSet.ReadXml("C:\Carpeta\Prueba.xml")
            'Cargo los datos en el DGV
            Me.DataGridView1.DataSource = moDataSet.Tables(0)
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    viernes, 24 de octubre de 2014 7:51
  • Gracias por responder, pero en mi xml tengo más de una tabla, ¿cómo podría hacer para que de esas tablas solo muestre las columnas que necesito?, por ejemplo, de la tabla 0 la columna 1, de la tabla 1 la columna 3, etc.

    gracias!

    viernes, 24 de octubre de 2014 14:52
  • Hola:
    Carga todo el fichero XML y luego las columnas que no quieres ver, ejecutas la siguiente instruccion
       Me.TU_DATAGRIDVEW.Columns("COLUMNA_INVISIBLE").Visible = False

    Un saludo desde Bilbo
    Carlos

    lunes, 27 de octubre de 2014 9:11
  • Gracias por la respuesta, ya lo había intentado pero dentro de un ciclo, pero ahora lo que hago es que si no encuentra una que esté en el datatable que siga recorriendo, y si está en el datatable que lo time en cuenta
    jueves, 30 de octubre de 2014 18:46