none
ES POSIBLE USAR UN FORMULARIO PARA VARIAS COSAS TOTALMENTE DIFERENTES? RRS feed

  • Pregunta

  • HOLA!

    ES LA PRIMERA VEZ QUE ME ENFRENTO A CREAR UN PROGRAMA CON VISUAL BASIC 2008 EXPRESS....

    SE TRATA DE UN PROGRAMA DE GESTION DE PERSONAL Y SERVICIOS REALIZADOS....

    LO PRIMERO ES QUE TENGO EL MENU PRINCIPAL ECHO CON LOS BOTONES Y LA BARRA DE MENUS.

    MI PREGUNTA ES, ES POSIBLE QUE SALGA UNA VENTANA EMERGENTE, LA CUAL LEA LOS TITULOS DE LAS COLUMNAS DE UNA BASE DE DATOS DE ACCESS, Y LAS PONGA COMO "LABELS" Y EL CONTENIDO DE LA FILA IDENTIFICADA POR UN ID, QUE DEBERIA PEDIRLO AL PULSAR EL BOTON "CONSULTA" EN EL MENU PRINCIPAL QUE ABRIRIA ESTA VENTANA EMERGENTE, LO COLOQUE EN "TEXTBOXS", Y QUE LUEGO MEDIANTE LA MISMA VENTANA, CONTENGA EL BOTON MODIFICAR, Y ENTONCES PERMITA MODIFICAR LOS DATOS Y QUE LOS ACTUALICE.  SERIA ALGO ASI COMO UN FORMULARIO EN EL PROGRAMA ACCESS PERO QUE SEA ECHO EN WINDOWS FORMS...
    LUEGO HAY UNOS APARTADOS CON EL MISMO BOTON LLAMADO CONSULTA, Y QUE DEPENDE DE QUE BOTON PULSES, ACCEDIERA A LA OPORTUNA TABLA DE LA BASE DE DATOS, Y HICIERA LO QUE HE DESCRITO AQUI ARRIBA.

    ESTO SE PUEDE HACER, O SERIA MAS FACIL CREAR UNA VENTANA CON LOS LABELS YA ECHOS Y QUE SOLO CONSULTARA LOS DATOS A LA BASE PARA CADA UNO DE LOS BOTONES CONSULTA, DE CADA APARTADO QUE EXISTE? ESTARIAMOS HABLANDO ENTONCES DE CREAR UNAS 6 VENTANAS DIFERENTES? QUIZA SERIA MAS FACIL ASI NO?


    NO SE SI ME HABRÉ EXPLICADO MUY BIEN...

    TENGO MAS PREGUNTAS PERO MEJOR UNA POR UNA...

    MUCHAS GRACIAS POR ADELANTADO...

    SALUDOS!!!!

    DMGGGMD

    miércoles, 16 de septiembre de 2009 12:43

Respuestas

  • ¡Hombre! Por hacerlo, lo puedes hacer todo utilizando un único formulario. Ahora bien, si necesitas recabar información del usuario para poder ejecutar la consulta SQL, lo normal es que habilites una serie de cuadros de diálogo (que también son formularios), para que el usuario introduzca los datos necesarios para poder ejecutar la consulta.


    > Lo unico que me hace falta aprender es como se hace para que lo
    > introducido se guarde en la base de datos ...

    ¿Conoces la sintaxis SQL de Microsoft Access? Si sabes cómo se construye una consulta INSERT INTO, DELETE o UPDATE, simplemente tienes que utilizar el método ExecuteNonQuery de un objeto OleDbCommand debidamente configurado, para ejecutar una consulta de actualización.

    Busca información en la ayuda de Visual Studio sobre el objeto OleDbCommand.

    > ... y como se recupera..

    El siguiente ejemplo muestra cómo recuperar los datos de una clásica tabla de Clientes existente en un archivo de datos Access 2003 o inferior, y mostrar los registros en un control DataGridView:

            Using cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                             "Data Source=C:\Mis documentos\Bd1.mdb")
    
                Dim sql As String = "SELECT * FROM Clientes"
    
                Dim da As New OleDbDataAdapter(sql, cnn)
    
                Dim dt As New DataTable("Clientes")
    
                da.Fill(dt)
    
                DataGridView1.DataSource = dt
    
            End Using
    


    > Y otra cuestion.... si yo creo un informe en la base de datos.... como puedo hacer
    > para que al darle a un boton se ejecute la funcion del informe pero que no haga
    > falta que se inicie el programa access???

    Pues ahí no sabría lo que decirte, porque si el informe está en el propio archivo de Access, digo yo que al menos tendrás que utilizar la propia biblioteca de Access para imprimir el informe.

    Para ello, en tu proyecto de Visual Basic tienes que hacer referencia al ensamblado de interoperabilidad de Microsoft Access. Seleccionarías Proyecto --> Agregar referencia..., y en la pestaña .NET busca el ensablado

           Microsoft.Office.Interop.Access

    Ahora, para imprimir el informe llamado Clientes, ejecutarías lo siguiente:

        Imports Microsoft.Office.Interop
    
        Private m_app As Access.Application
    
        Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    
            m_app = New Access.Application
    
            With m_app
                .OpenCurrentDatabase("C:\Mis documentos\Bd1.mdb")
    
                ' No hacemos visible la interfaz de usuario de Access 
                ' .Visible = True
    
                ' Mostramos el informe en "Vista Previa" 
                ' .DoCmd.OpenReport("Clientes", Access.AcView.acViewPreview)
    
                ' Si quieres mandar el informe directamente a la impresora 
                .DoCmd.OpenReport "Clientes", Access.AcView.acViewNormal 
            End With
    
        End Sub
    
        Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
    
            ' Cerramos Access 
            m_app.Quit()
    
            m_app = Nothing
    
        End Sub
    
    


    Enrique Martínez [MS MVP - VB]
    • Marcado como respuesta DMGGGMD miércoles, 16 de septiembre de 2009 17:47
    miércoles, 16 de septiembre de 2009 17:09
  • Hola:

    Si te refieres a crear los controles del formulario dinámicamente (en tiempo de ejecución), con los datos de posición, anchura y restantes propiedades recabados de una base de datos, te diré que sí es posible, pero a lo mejor es más fácil que diseñes manualmente tu propio formulario (en tiempo de diseño), salvo que te guste escribir grandes listados de código fuente, cosa ésta que hace por nosotros el Diseñador de formularios de Visual Studio. :-)

    Ten en cuenta que para escribir programas de Visual Basic .net, no es necesario hacerlo con Visual Basic 2008, sea cual sea la versión que se utilice. Con el mísmisimo Bloc de Notas de Windows puedes escribir el código fuente de tus programas, y compilarlo desde la línea de comandos con el compilador VBC. Pero ¡vamos! Pienso que más fácil que diseñes tus formularios desde el propio Visual Studio. :-)

    Un saludo
    Enrique Martínez [MS MVP - VB]
    • Marcado como respuesta DMGGGMD miércoles, 16 de septiembre de 2009 15:47
    miércoles, 16 de septiembre de 2009 13:30
  • hola

    Segun entido pretendes hacer un forma de uso generico para el mantenimiento de las tablas, de tu db, haciando uso de la metadata o estructura de tus tablas y armar el diseño del form en base a esto

    Mira como poder se podria hacer,l la verdad winforms no es muy dinamico para este tipos de tareas mas que anda para posicionar controles y esas cosas, por ahi una aplicacion web seria mas simple, ya que armas los tags en runtime y luego lo mandas al cliente renderizado

    Si en el post hubieras comentado que son no se 50 tablas a mantener por ahi el esfuerzo de crear un form dinamico valdria la pena, pero dices que son 6 tablas, analiza costo-beneficio te conviene embarcarte en este desarrollo, creo que hacer 6 forms uno por tabla, los tipicos ABM seria mas simple y standar

    Sino la otra es buscar algun soft de generacion de codigo que haga el laburo de crear los formularios, algo como esto
    http://www.nconstruct.com/Default.aspx
    hay una version lite para descargar
    este usa nhibernate para conectarse a la db

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta DMGGGMD miércoles, 16 de septiembre de 2009 15:47
    miércoles, 16 de septiembre de 2009 14:01

Todas las respuestas

  • Hola:

    Si te refieres a crear los controles del formulario dinámicamente (en tiempo de ejecución), con los datos de posición, anchura y restantes propiedades recabados de una base de datos, te diré que sí es posible, pero a lo mejor es más fácil que diseñes manualmente tu propio formulario (en tiempo de diseño), salvo que te guste escribir grandes listados de código fuente, cosa ésta que hace por nosotros el Diseñador de formularios de Visual Studio. :-)

    Ten en cuenta que para escribir programas de Visual Basic .net, no es necesario hacerlo con Visual Basic 2008, sea cual sea la versión que se utilice. Con el mísmisimo Bloc de Notas de Windows puedes escribir el código fuente de tus programas, y compilarlo desde la línea de comandos con el compilador VBC. Pero ¡vamos! Pienso que más fácil que diseñes tus formularios desde el propio Visual Studio. :-)

    Un saludo
    Enrique Martínez [MS MVP - VB]
    • Marcado como respuesta DMGGGMD miércoles, 16 de septiembre de 2009 15:47
    miércoles, 16 de septiembre de 2009 13:30
  • hola

    Segun entido pretendes hacer un forma de uso generico para el mantenimiento de las tablas, de tu db, haciando uso de la metadata o estructura de tus tablas y armar el diseño del form en base a esto

    Mira como poder se podria hacer,l la verdad winforms no es muy dinamico para este tipos de tareas mas que anda para posicionar controles y esas cosas, por ahi una aplicacion web seria mas simple, ya que armas los tags en runtime y luego lo mandas al cliente renderizado

    Si en el post hubieras comentado que son no se 50 tablas a mantener por ahi el esfuerzo de crear un form dinamico valdria la pena, pero dices que son 6 tablas, analiza costo-beneficio te conviene embarcarte en este desarrollo, creo que hacer 6 forms uno por tabla, los tipicos ABM seria mas simple y standar

    Sino la otra es buscar algun soft de generacion de codigo que haga el laburo de crear los formularios, algo como esto
    http://www.nconstruct.com/Default.aspx
    hay una version lite para descargar
    este usa nhibernate para conectarse a la db

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta DMGGGMD miércoles, 16 de septiembre de 2009 15:47
    miércoles, 16 de septiembre de 2009 14:01
  • Gracias a los dos por la respuesta tan inmediata!!!!!


    En referencia a lo de hacer 6 forms... me referia porque tampoco quiero que se me cuelgue el ordenador ni nada parecido...o que se disminuya la velocidad de ejecución del programa. La cuestion, haré los 6 formularios para las 6 consultas que hay.... pero la estructura es la siguiente.

    en el menu de la aplicacion por ejemplo hay un imagen, que corresponde al personal, a traves de un contextmenustrip, al darle con el boton secundario se habre un menu que pone, consultar, dar de alta, modificar, dar de baja.  Todas estas opciones actuan sobre la misma tabla.... pero son funciones diferentes y es lo que queria saber.... si con crear un solo form.... pueda hacerlo todo. por ejemplo al darle a consultar... que me pida el numero de personal y me muestre la informacion pero que no se pueda tocar. al darle a dar de alta, que me salga el formulario en limpio y luego con un boton guardar, al dar a modificar que me pregunte por el numero de empleado y los textbox me dejen modificar el texto y luego actualizarlo en la base de datos... y por ultimo en dar de baja que simplemente preguntara por el numero de empleado y que activara un checkbox k se llame BAJA ya que no quiero perder los datos....

    Lo unico que me hace falta aprender es como se hace para que lo introducido se guarde en la base de datos, y como se recupera.... de resto creo saber como hacer lo demas....

    Y otra cuestion.... si yo creo un informe en la base de datos.... como puedo hacer para que al darle a un boton se ejecute la funcion del informe pero que no haga falta que se inicie el programa access???


    GRACIAAAS MILEEEEEES!!!!!!!!!
    miércoles, 16 de septiembre de 2009 16:29
  • ¡Hombre! Por hacerlo, lo puedes hacer todo utilizando un único formulario. Ahora bien, si necesitas recabar información del usuario para poder ejecutar la consulta SQL, lo normal es que habilites una serie de cuadros de diálogo (que también son formularios), para que el usuario introduzca los datos necesarios para poder ejecutar la consulta.


    > Lo unico que me hace falta aprender es como se hace para que lo
    > introducido se guarde en la base de datos ...

    ¿Conoces la sintaxis SQL de Microsoft Access? Si sabes cómo se construye una consulta INSERT INTO, DELETE o UPDATE, simplemente tienes que utilizar el método ExecuteNonQuery de un objeto OleDbCommand debidamente configurado, para ejecutar una consulta de actualización.

    Busca información en la ayuda de Visual Studio sobre el objeto OleDbCommand.

    > ... y como se recupera..

    El siguiente ejemplo muestra cómo recuperar los datos de una clásica tabla de Clientes existente en un archivo de datos Access 2003 o inferior, y mostrar los registros en un control DataGridView:

            Using cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                             "Data Source=C:\Mis documentos\Bd1.mdb")
    
                Dim sql As String = "SELECT * FROM Clientes"
    
                Dim da As New OleDbDataAdapter(sql, cnn)
    
                Dim dt As New DataTable("Clientes")
    
                da.Fill(dt)
    
                DataGridView1.DataSource = dt
    
            End Using
    


    > Y otra cuestion.... si yo creo un informe en la base de datos.... como puedo hacer
    > para que al darle a un boton se ejecute la funcion del informe pero que no haga
    > falta que se inicie el programa access???

    Pues ahí no sabría lo que decirte, porque si el informe está en el propio archivo de Access, digo yo que al menos tendrás que utilizar la propia biblioteca de Access para imprimir el informe.

    Para ello, en tu proyecto de Visual Basic tienes que hacer referencia al ensamblado de interoperabilidad de Microsoft Access. Seleccionarías Proyecto --> Agregar referencia..., y en la pestaña .NET busca el ensablado

           Microsoft.Office.Interop.Access

    Ahora, para imprimir el informe llamado Clientes, ejecutarías lo siguiente:

        Imports Microsoft.Office.Interop
    
        Private m_app As Access.Application
    
        Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    
            m_app = New Access.Application
    
            With m_app
                .OpenCurrentDatabase("C:\Mis documentos\Bd1.mdb")
    
                ' No hacemos visible la interfaz de usuario de Access 
                ' .Visible = True
    
                ' Mostramos el informe en "Vista Previa" 
                ' .DoCmd.OpenReport("Clientes", Access.AcView.acViewPreview)
    
                ' Si quieres mandar el informe directamente a la impresora 
                .DoCmd.OpenReport "Clientes", Access.AcView.acViewNormal 
            End With
    
        End Sub
    
        Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
    
            ' Cerramos Access 
            m_app.Quit()
    
            m_app = Nothing
    
        End Sub
    
    


    Enrique Martínez [MS MVP - VB]
    • Marcado como respuesta DMGGGMD miércoles, 16 de septiembre de 2009 17:47
    miércoles, 16 de septiembre de 2009 17:09