none
Como Mostrar Resultado de Consulta Sql en un DataGridView VB.NET RRS feed

  • Pregunta

  • Hola Gente del Foro.

    Estoy desarrollando una aplicacion con vb.net 2008 para ejecutarla de manera local 
    y una base de datos sqlserver ce.

    He creado la base de datos con los asistentes que el visual estudio integra, todo marchaba 

    bien realizando la carga de registros y mostrandolas cada una en un DGV diferente.

    Surgió la necesidad de crear 3 tablas : Servicios , Productos, Servicios-Productos
     ésta ultima la creé porque en los servicios se utilizan varios productos , y cada producto 

    puede ser utilizado por varios servicios.

    ahora bien , necesito que al elegir un servicio de una lista (para simplificar el asunto) en 

    un DGV se muestre los productos que este servicio utilizaria.

    (espero que se entienda :-D )

    Entonces, para obtener el id del servicio para pasarlo como parametro a la consulta no tuve 

    inconvenientes, el problema nace cuando quiero mostrar el resultado de la consulta en el 

    DGV.

    tengo un tableadapter el cual tiene como metodo la ejecucion de la consulta mencionada

    Dim dt As New Dataset1TableAdapters.QueriesTableAdapter

    al escribir

    DGV.datasource = dt.Prod_utilizados(nservicio)

    la ejecucion continua como si la linea anterior no estuviese escrita :(

    Hace muy poco que estoy en este tema por eso pido ayuda en el foro, porque es muy probable 

    que tenga errores de concepto al usar los tableadapters y demas , entonces necesito que 

    alguien me guíe.

    O será que debo tener en cuenta algo mas al asociar el recurso al DGV?


    Coloco este tema en esta seccion puesto que la consulta la he probado con el asistente y no 

    me produce errores.
    Por las dudas pego la consulta para que se vea que no es ese el problema

    SELECT p.Descripcion, p.Marca, p.Contenido, p.Unidad_de_Contenido,  
                p.Precio_Costo, p.Precio_Venta

    FROM  [Servicios-Productos]  sp JOIN Productos p 
                                              ON sp.id_producto = p.Id_Producto
                    
    WHERE     (sp.Id_servicio =" & nservicio




    Un millón de Gracias desde ya!
    martes, 27 de agosto de 2013 9:41

Respuestas

  • Hola:
    En un Form con 1 ComboBox y 1 DataGridView, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1
        Private msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=TU_BASE_DE_DATOS;Integrated Security=True"

        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear adaptador
                    ' El nombre de campo NOMBRE_SERVICIO es ficticio
                    Dim loDataAdapter As New SqlDataAdapter("SELECT Id_servicio, NOMBRE_SERVICIO FROM SERVICIO", loConexion)
                    ' instanciar datatable
                    Dim loDataTable As New DataTable()
                    ' utilizar el dataadapter para llenar el datatable con la tabla
                    loDataAdapter.Fill(loDataTable)
                    ' llenar el combobox con los nombres del SERVICIO
                    With ComboBox1
                        .DataSource = loDataTable
                        .DisplayMember = "NOMBRE_SERVICIO"
                        .ValueMember = "Id_servicio"
                        .SelectedIndex = -1
                    End With
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Form1_Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

        Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectionChangeCommitted
            ComboBox1.DataSource = Nothing
            ComboBox1.Items.Clear()
            Try
                Dim loDataTable As New DataTable
                Dim lsQuery As String = "SELECT p.Descripcion, p.Marca, p.Contenido, p.Unidad_de_Contenido, p.Precio_Costo, p.Precio_Venta FROM Productos p Inner Join [Servicios-Productos] ON sp.id_producto = p.Id_Producto WHERE sp.Id_servicio = " & CStr(Me.ComboBox1.SelectedValue)
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Dim loDataAdapter As New SqlDataAdapter(lsQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    Me.DataGridView1.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "ComboBox1_SelectionChangeCommitted", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
    End Class

    Este ejemplo esta hecho para una base de datos SQLServer, adaptalo a tu bse de datos

    Un saludo desde Bilbo
    Carlos


    martes, 27 de agosto de 2013 11:00

Todas las respuestas

  • (en la ultima linea de la consulta si cierro el parentesis, solo que al copiarlo y pegarlo se perdió , perdón)
    martes, 27 de agosto de 2013 9:54
  • Hola:
    En un Form con 1 ComboBox y 1 DataGridView, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1
        Private msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=TU_BASE_DE_DATOS;Integrated Security=True"

        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear adaptador
                    ' El nombre de campo NOMBRE_SERVICIO es ficticio
                    Dim loDataAdapter As New SqlDataAdapter("SELECT Id_servicio, NOMBRE_SERVICIO FROM SERVICIO", loConexion)
                    ' instanciar datatable
                    Dim loDataTable As New DataTable()
                    ' utilizar el dataadapter para llenar el datatable con la tabla
                    loDataAdapter.Fill(loDataTable)
                    ' llenar el combobox con los nombres del SERVICIO
                    With ComboBox1
                        .DataSource = loDataTable
                        .DisplayMember = "NOMBRE_SERVICIO"
                        .ValueMember = "Id_servicio"
                        .SelectedIndex = -1
                    End With
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Form1_Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

        Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectionChangeCommitted
            ComboBox1.DataSource = Nothing
            ComboBox1.Items.Clear()
            Try
                Dim loDataTable As New DataTable
                Dim lsQuery As String = "SELECT p.Descripcion, p.Marca, p.Contenido, p.Unidad_de_Contenido, p.Precio_Costo, p.Precio_Venta FROM Productos p Inner Join [Servicios-Productos] ON sp.id_producto = p.Id_Producto WHERE sp.Id_servicio = " & CStr(Me.ComboBox1.SelectedValue)
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Dim loDataAdapter As New SqlDataAdapter(lsQuery, loConexion)
                    loDataAdapter.Fill(loDataTable)
                    Me.DataGridView1.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "ComboBox1_SelectionChangeCommitted", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub
    End Class

    Este ejemplo esta hecho para una base de datos SQLServer, adaptalo a tu bse de datos

    Un saludo desde Bilbo
    Carlos


    martes, 27 de agosto de 2013 11:00
  • Hola Carlos, antes que nada muchas gracias por responder!
    Voy a Probar el codigo que me has escrito pero antes quiero comentarte algunas cosas.

    Todo lo que tiene que ver con base de datos  en mi proyecto lo he realizado con el asistente de visual studio, te cuento por que ...
    Cuando intento abrir una conexion desde vb.net a sql se produce el error 26, diciendo que no se puede realizar la conexion, he tratado y tratado 
    pero no consigo que se conecte.

    En mi Proyecto la base de datos esta dentro de la carpeta del proyecto y el asistente fue quien se encargo de realizar las conexiones
    De igual manera voy a adaptarlo y probarlo. luego comentare como fué


    Gracias Otra vez!!

    martes, 27 de agosto de 2013 19:36
  • Que tal Carlos?

    Al ejecutar el codigo , se produce el error 26 de sql. me pareceraro, porque con otras consultas si puedo conectar con la BD
    he intentado usar la conexion que crea el visual estudio  utilizando my.settings.database1stringConnection

    pero el problema es el mismo, tienes idea de porq?

    (señalo que las consultas que funcionan son las que realizo el asistente de vb) 

     
    miércoles, 28 de agosto de 2013 18:14
  • Hola.

    En que línea te da el error.

    Tienes problemas para resolver esta incidencia, esto es debido a que lo haces con asistentes y asi no tienes ningún control, acostúmbrate a hacerlo todo por código y te ahorraras dolores de cabeza y tiempo perdido.

    Un saludo dsde Bilbo
    Carlos

    jueves, 29 de agosto de 2013 8:38
  • Hola Carlos, Perdón por la demora en responder, he tenido un par de problemas  por eso me he desaparecido del tema.
    Paso a contarte, el error.
    Error de la red o especifico de la instancia mientras se establecia una conexion con el servidor.

    No se encontro el servidor o no está accesible.

    Error26

    Si puedes ayudarme en eso te lo agradecería

    Saludos

    miércoles, 11 de septiembre de 2013 3:00
  • Buenas Carlos , te escribo otra vez , esta vez para agradecerte pues pude adaptar tu codigo a mi aplicacion , ya logro conectar con la instancia de sql.

    Ahora tengo un problema con la consulta ,:

     Dim lsQuery As String = "SELECT     Productos.Id_Producto, Productos.Nombre, Productos.Marca, Productos.Contenido, Productos.Precio_Costo, Productos.Precio_Venta, Productos.Stock, " & _

           " Productos.Observaciones, Productos.Estado_Actividad, Productos.STR " & _
    "FROM         Productos INNER JOIN " & _
                          "  ps ON Productos.Id_Producto = ps.Id_Producto" & _
                   "WHERE  ps.Id_Servicio = " & CStr(nservicio)

    la tabla ps es una tabla que almacena las asociaciones productos-servicios

    y en la linea del where me produce un error (token offset = ps)

    se que el problema es en esa linea porque la borro y la consulta se carga en el DGV

    pero se cargan los productos asociados a todos los servicios :/

    me diste una mano gigante te lo agradezco nuevamente, y espero tu respuesta

    ahhh tambien te queria preguntar que es "CStr()"

    Saludos idolo!



    miércoles, 11 de septiembre de 2013 7:57