none
Consulta a través de ComboBox RRS feed

  • Pregunta

  • Hola buenas,

    estoy teniendo un problema a la hora de recoger el valor de un ComboBox y realizar una consulta con el valor obtenido.

    Tengo esta consulta:

    Dim ValorCombo As String = cmb_exptes.SelectedItem.ToString()
            Dim sql As String = "select nombre_p, apellidos_p, dni, cl.n_expte 
            from pacientes p 
            inner join historial_clinico cl on cl.id_paciente=p.id_paciente  
            where cl.n_expte = " + ValorCombo + ""


    Este codigo es del combobox:

    Try
                Dim query As String = "select n_expte from historial_clinico where id_paciente = " + txt_id.Text + ""
                Dim da As New SqlDataAdapter(query, cn)
                Dim ds As New DataSet
                da.Fill(ds)
                With Me.cmb_exptes
                    Me.cmb_exptes.DataSource = ds.Tables(0)
                    Me.cmb_exptes.DisplayMember = "n_expte"
                    Me.cmb_exptes.ValueMember = "n_expte"
                    Me.cmb_exptes.SelectedIndex = 0
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

    El error que me muestra visual studio es : El identificador formado por varias partes "System.Data.DataRowView" no se pudo enlazar.

    El problema lo tenga en la condicion Where ya que si introduzco un String directamente la consulta la realiza correctamente. He leido que el valor que devuelve un ComboBox es tipo Object y tendria que hacer una conversion pero no me funciona.

    ¿Alguien puede ayudarme?

    Un saludo y gracias

    martes, 26 de enero de 2016 16:19

Todas las respuestas

  • Hola, buenas.

    Prueba a utilizar el SelectedValue en lugar del SelectedItem del ComboBox. El SelectedItem es un DatarowItem y al aplicarle un ToString te devuelve "System.Data.DataRowView"

    Establece esto en la query:

    Dim ValorCombo As String = cmb_exptes.SelectedValue.ToString()
            Dim sql As String = "select nombre_p, apellidos_p, dni, cl.n_expte 
            from pacientes p 
            inner join historial_clinico cl on cl.id_paciente=p.id_paciente  
            where cl.n_expte = " + ValorCombo + ""

    Un saludo.


    When an answer is helpful, please vote as helpful, propose as answer and/or mark as answer

    martes, 26 de enero de 2016 16:52
  • hola

    lo primero que noto es que no veo donde realzias el DataBind() del combo, te falta la linea

    Me.cmb_exptes.DataBind()

    para que se carguen los datos

    -----

    Por otro lado deberias usar parametros, concatenar en un string los valores no es una buena practica

    Dim sql As String = "select nombre_p, apellidos_p, dni, cl.n_expte from pacientes p inner join historial_clinico cl on cl.id_paciente=p.id_paciente where cl.n_expte = @expte"

    Dim cmd As New SqlCommand(sql, cn)

    cmd.Parameters.AddWithValue("@expte", cmb_exptes.SelectedValue)

    Dim da As New SqlDataAdapter(cmd)

    como veras de esta forma asignas valores a la query

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 26 de enero de 2016 17:08
  • Hola Leandro,

    El ComboBox lo tengo asi:

    Try
                Dim query As String = "select n_expte from historial_clinico where id_paciente = " + txt_id.Text + ""
                Dim da As New SqlDataAdapter(query, cn)
                Dim ds As New DataSet
                da.Fill(ds)
                With Me.cmb_exptes
                    Me.cmb_exptes.DataSource = ds.Tables(0)
                    Me.cmb_exptes.DisplayMember = "n_expte"
                    Me.cmb_exptes.ValueMember = "n_expte"
                    Me.cmb_exptes.SelectedIndex = 0
    
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try


    Si pongo la linea que me has indicado :

    Me.cmb_exptes.DataBind()

    Me da error de : DataBind no es un miembro de ComboBox

    Por otro lado he realizado la modificación que me has indicado (ya lo había intentando) pero me sigue apareciendo el mismo error.

    Private Sub cmb_exptes_SelectedValueChanged(sender As Object, e As EventArgs) Handles cmb_exptes.SelectedValueChanged
    
            Dim sql As String = "select nombre_p, apellidos_p, dni, cl.n_expte, h.fecha, m.nombre, e.valor 
            from pacientes p 
            inner join historial_clinico cl on cl.id_paciente=p.id_paciente
            inner join historico h on h.n_expte=cl.n_expte
            inner join estados e on e.id_estado=cl.estado
            inner join medicos m on m.id_doctor=cl.medico   
            where cl.n_expte = @expte"
            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@expte", cmb_exptes.SelectedValue)
            cn.Open()
    
            Rs = cmd.ExecuteReader()
    
            If Rs.Read() Then
                txt_nombre_p.Text = CStr(Rs("nombre_p"))
                txt_apellidos.Text = CStr(Rs("apellidos_p"))
                txt_dni.Text = CStr(Rs("dni"))
                'txt_hcc.Text = CStr(Rs("txt_hcc"))
                'txt_obs.Text = CStr(Rs("txt_obs"))
                txt_fecha.Text = CStr(Rs("fecha"))
                txt_doctor.Text = CStr(Rs("nombre"))
                txt_estado.Text = CStr(Rs("valor"))
                txt_n_expte.Text = CStr(Rs("n_expte"))
            End If
    
            cn.Close()
    
        End Sub

    Este sería el código completo.

    El error que me da es:  No hay ninguna asignación de tipo de objeto System.Data.DataRowView a un tipo nativo de un proveedor administrado conocido.

    No sé por donde coger este error.

    Gracias

    martes, 26 de enero de 2016 17:39
  • Ya está solucionado Leandro,

    He añadido el toString.

    ¿Como puedo hacer que cuando seleccione otra opcion del ComboBox se carguen los datos que correspondan?

    ¿Eso del DataBind puede afectar?

    Gracias

    martes, 26 de enero de 2016 17:48
  • Gracias por la ayuda Leandro,

    No he dicho nada ;)

    Un saludo

    martes, 26 de enero de 2016 17:51
  • Pero no es una aplicacion web la que desarrollas ? porque estas consultando en el foro de asp.net

    >>¿Como puedo hacer que cuando seleccione otra opcion del ComboBox se carguen los datos que correspondan?

    pero alli ya usas el evento SelectedValueChanged, esto deberia alcanzar para que suceda lo que mencionas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 26 de enero de 2016 18:10