none
Segun dato ingresado, mostrar ultimo registro de tabla RRS feed

  • Pregunta

  • Hola amigos del foro,

    Favor ayuda con lo siguiente

    Al ingresar datos en un textbox necesito que un label muestre el ultimo registro de la tabla A segun el dato ingresado

    Les dejo un imagen para mostrar la idea.

    Estoy trabajando con vb.net 2015

    Agradecido de sus comentarios.

    Saludos!


    martes, 15 de agosto de 2017 4:20

Respuestas

  • No, no sugerí quitar la instrucción TOP porque entonces lo que obtendrás será lo contrario a lo que buscas dado que recuperas las filas de manera descendente y reemplazas los valores hasta la última fila del conjunto y la "última fila" contiene el "primer valor". Lo que sugerí es quitar los paréntesis que enmarcan el número de filas que deseas recuperar. La consulta sql debería quedar de la siguiente manera:

    Dim Consulta = "SELECT TOP 1 codigo, nombre, descripcion_1, descripcion_2 
                            FROM tabla_a WHERE nombre = ? ORDER BY codigo DESC"


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta error_extremo miércoles, 16 de agosto de 2017 11:53
    martes, 15 de agosto de 2017 18:38

Todas las respuestas

  • - En caso 'TablaA' sea una tabla de base de datos debes ordenar de manera descendente por la columna 'Codigo' y tomar la primera fila del conjunto filtrado, por ejemplo:

    Using Conn As New SqlConnection("Cadena de conexión")
    	Dim Consulta = "SELECT TOP (1) Codigo, Nombre, Descripcion_1, Descripcion_2 
    			FROM TablaA WHERE Nombre = @Nombre ORDER BY Codigo DESC"
    
    	Dim Command As New SqlCommand(Consulta, Conn)
    
    	Command.Parameters.AddWithValue("@Nombre", TextBox1.Text)
    
    	Dim Reader = Command.ExecuteReader
    
    	If Reader.Read Then
    		Label1.Text = Reader("Descripcion_1").ToString()
    		Label2.Text = Reader("Descripcion_2").ToString()
    	End If
    	Reader.Close()
    
    End Using


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    martes, 15 de agosto de 2017 4:59
  • Gracias Williams.

    Pero me aparece un error

    Using Conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=baseprueba.mdb;")
                Dim Consulta = "SELECT TOP (1) codigo, nombre, descripcion_1, descripcion_2, FROM tabla_a WHERE nombre = @nombre ORDER BY codigo DESC"
    
                Dim Command As New OleDbCommand(Consulta, Conn)
    
                Command.Parameters.AddWithValue("@nombre", TextBox1.Text)
                Command.Connection.Open()
    
    
                Dim Reader = Command.ExecuteReader
    
                If Reader.Read Then
                    LN.Text = Reader("nombre").ToString()
                    LD1.Text = Reader("descripcion_1").ToString()
                    LD2.Text = Reader("descripcion_2").ToString()
                End If
                Reader.Close()
    
            End Using

    El error es:

    Información adicional: La instrucción SELECT incluye una palabra reservada, le falta un argumento o está mal escrito, o bien los signos de puntuación no son correctos.

    Gracias por tu respuesta.

    martes, 15 de agosto de 2017 5:50
  • Se lo había quitado ya, pero es el mismo mensaje, adjunto imagen.

    martes, 15 de agosto de 2017 6:12
  • Si, el mensaje de la excepción tiene razón, la lista de selección incluye la palabra reservada FROM, nota que luego de la columna 'descripcion_2' dejaste un signo de coma ',', quitalo por favor.

    Algo mas, si el valor a buscar se encuentra en el control que has nombrado como 'LN', entonces cambia por 'TextBox1', de hecho no tiene sentido volver a recuperar el mismo valor.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    martes, 15 de agosto de 2017 6:14
  • Punto adicional, creo que el número de registros que se indica en la cláusula TOP -en Microsoft Access- no va encerrado entre paréntesis, quitalo por favor.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    martes, 15 de agosto de 2017 6:18
  • la coma esta eliminanda, 

    y ln.text = textbox1.text y de igual manera me arroja el mismo error.

    hasta ahora no logro dar.

    martes, 15 de agosto de 2017 6:31
  • eliminando el top me funciona,

     Using Conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=baseprueba.mdb;")
                Dim Consulta = "SELECT codigo, nombre, descripcion_1, descripcion_2 from tabla_a WHERE nombre = @nombre ORDER BY codigo DESC"

                Dim Command As New OleDbCommand(Consulta, Conn)

                Command.Parameters.AddWithValue("@nombre", TextBox1.Text)
                Command.Connection.Open()


                Dim Reader = Command.ExecuteReader()

                If Reader.Read Then
                    LN.Text = Reader("nombre").ToString()
                    LD1.Text = Reader("descripcion_1").ToString()
                    LD2.Text = Reader("descripcion_2").ToString()
                End If
                Reader.Close()

            End Using

    ahora me devolverá siempre el valor solicitado...

     es decir, desde la tabla a, siempre me muestre el ULTIMO VALOR del solicitado en textbox1?

    martes, 15 de agosto de 2017 6:42
  • No, no sugerí quitar la instrucción TOP porque entonces lo que obtendrás será lo contrario a lo que buscas dado que recuperas las filas de manera descendente y reemplazas los valores hasta la última fila del conjunto y la "última fila" contiene el "primer valor". Lo que sugerí es quitar los paréntesis que enmarcan el número de filas que deseas recuperar. La consulta sql debería quedar de la siguiente manera:

    Dim Consulta = "SELECT TOP 1 codigo, nombre, descripcion_1, descripcion_2 
                            FROM tabla_a WHERE nombre = ? ORDER BY codigo DESC"


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta error_extremo miércoles, 16 de agosto de 2017 11:53
    martes, 15 de agosto de 2017 18:38
  • Gracias Willams, con la explicación me que da mas claro.

    Funciona!!

    miércoles, 16 de agosto de 2017 11:53