none
Recorrer registros de una consulta SQL

    Question

  • Hola a todos. estoy trabajando en vb 2008 con una base datos access
    Quisiera hacer una consulta SQL y los resultados volcarlo en una variable para su posterior uso.
    estoy intentando hacer este codigo pero solo me debuelve el primer registro y la idea es que con un bucle me recorra y muestre todos los registros uno por uno.
    Aqui el codigo

    Using dbConn As New OleDbConnection( _
      "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & Application.StartupPath & "\" & frmMenu.lblBase.Text)
                   
       Dim SQL As String = "SELECT Composicion.codigo_Rubro" & _
       " FROM Precios " & _
       " INNER JOIN (n3_rubros INNER JOIN Composicion ON n3_rubros.codigo_rubro = Composicion.codigo_Rubro) ON Precios.COS_DESCR = Composicion.COS_DESCR" & _
       " WHERE Precios.COS_DESCR= '" & cmbMdo.Text & "'"

       Dim cmd As New OleDbCommand(SQL, dbConn)
       dbConn.Open()

       Dim dr As OleDbDataReader = _
       cmd.ExecuteReader(CommandBehavior.CloseConnection)
       Do While dr.Read
           Label26.Text = (dr.GetInt32(0))
       Loop

    End Using


    Saludos

    Carlos
    Monday, March 15, 2010 6:54 PM

Answers

  • hola

    el codigo que usas esta correcto, salvo por que no usas parametros en la consulta sql

    lo que si veo es que estas tratando de volcar una coleccion en un solo control, no seria mejor usar una listbox, opor lo menos concatenar los valores devueltos

    podrias ahcerlo de esta forma

    Using dbConn As New OleDbConnection( _
      "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & Application.StartupPath & "\" & frmMenu.lblBase.Text)
      
       dbConn.Open()
      
       Dim SQL As String = "SELECT Composicion.codigo_Rubro" & _
       " FROM Precios " & _
       " INNER JOIN (n3_rubros INNER JOIN Composicion ON n3_rubros.codigo_rubro = Composicion.codigo_Rubro) ON Precios.COS_DESCR = Composicion.COS_DESCR" & _
       " WHERE Precios.COS_DESCR= @cosdesc "

       Dim cmd As New OleDbCommand(SQL, dbConn)
       cmd.Parameters.AddWithValue("@cosdesc", cmbMdo.Text)
      

       Dim dr As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
      
       Do While dr.Read
           Label26.Text = string.Format("{0}, {1}", Label26.Text, dr.GetInt32(0))
       Loop

    End Using


    aunque si suas un control listbox tambien seria bueno

    Using dbConn As New OleDbConnection( _
      "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & Application.StartupPath & "\" & frmMenu.lblBase.Text)
      
       dbConn.Open()
      
       Dim SQL As String = "SELECT Composicion.codigo_Rubro" & _
       " FROM Precios " & _
       " INNER JOIN (n3_rubros INNER JOIN Composicion ON n3_rubros.codigo_rubro = Composicion.codigo_Rubro) ON Precios.COS_DESCR = Composicion.COS_DESCR" & _
       " WHERE Precios.COS_DESCR= @cosdesc"

       Dim cmd As New OleDbCommand(SQL, dbConn)
       cmd.Parameters.AddWithValue("@cosdesc", cmbMdo.Text)
      

       Dim dr As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
      
       Do While dr.Read
           ListBox1.Items.Add(CStr(dr(0)))
       Loop

    End Using


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by carlosanpy Monday, March 15, 2010 10:27 PM
    Monday, March 15, 2010 7:13 PM

All replies

  • casrlosanpy,

    Usted debe concatenar los resultados, pero un registro supera la de otros, ver:

    Using dbConn As New OleDbConnection( _
      "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & Application.StartupPath & "\" & frmMenu.lblBase.Text)
                    
       Dim SQL As String = "SELECT Composicion.codigo_Rubro" & _
       " FROM Precios " & _
       " INNER JOIN (n3_rubros INNER JOIN Composicion ON n3_rubros.codigo_rubro = Composicion.codigo_Rubro) ON Precios.COS_DESCR = Composicion.COS_DESCR" & _
       " WHERE Precios.COS_DESCR= '" & cmbMdo.Text & "'"
    
       Dim cmd As New OleDbCommand(SQL, dbConn)
       dbConn.Open()
    
       Dim dr As OleDbDataReader = _
       cmd.ExecuteReader(CommandBehavior.CloseConnection)
       Label26.Text = ""
       Do While dr.Read()
           Label26.Text &= (dr.GetInt32(0)) & " "
       Loop
    
    End Using


    []s.

    Alan. Twitter
    Monday, March 15, 2010 7:08 PM
  • hola

    el codigo que usas esta correcto, salvo por que no usas parametros en la consulta sql

    lo que si veo es que estas tratando de volcar una coleccion en un solo control, no seria mejor usar una listbox, opor lo menos concatenar los valores devueltos

    podrias ahcerlo de esta forma

    Using dbConn As New OleDbConnection( _
      "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & Application.StartupPath & "\" & frmMenu.lblBase.Text)
      
       dbConn.Open()
      
       Dim SQL As String = "SELECT Composicion.codigo_Rubro" & _
       " FROM Precios " & _
       " INNER JOIN (n3_rubros INNER JOIN Composicion ON n3_rubros.codigo_rubro = Composicion.codigo_Rubro) ON Precios.COS_DESCR = Composicion.COS_DESCR" & _
       " WHERE Precios.COS_DESCR= @cosdesc "

       Dim cmd As New OleDbCommand(SQL, dbConn)
       cmd.Parameters.AddWithValue("@cosdesc", cmbMdo.Text)
      

       Dim dr As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
      
       Do While dr.Read
           Label26.Text = string.Format("{0}, {1}", Label26.Text, dr.GetInt32(0))
       Loop

    End Using


    aunque si suas un control listbox tambien seria bueno

    Using dbConn As New OleDbConnection( _
      "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & Application.StartupPath & "\" & frmMenu.lblBase.Text)
      
       dbConn.Open()
      
       Dim SQL As String = "SELECT Composicion.codigo_Rubro" & _
       " FROM Precios " & _
       " INNER JOIN (n3_rubros INNER JOIN Composicion ON n3_rubros.codigo_rubro = Composicion.codigo_Rubro) ON Precios.COS_DESCR = Composicion.COS_DESCR" & _
       " WHERE Precios.COS_DESCR= @cosdesc"

       Dim cmd As New OleDbCommand(SQL, dbConn)
       cmd.Parameters.AddWithValue("@cosdesc", cmbMdo.Text)
      

       Dim dr As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
      
       Do While dr.Read
           ListBox1.Items.Add(CStr(dr(0)))
       Loop

    End Using


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marked as answer by carlosanpy Monday, March 15, 2010 10:27 PM
    Monday, March 15, 2010 7:13 PM
  • Esta perfecto!!

    Muchas gracias

    Carlos
    Monday, March 15, 2010 10:26 PM