none
Busqueda apartir de una consulta RRS feed

  • Pregunta

  • Hola

    Estoy realizando un consulta en TableAdapter en Visual Studio 2005 y bueno para que me busque registro apartir de lo que escribo en una caja de text (TextBox) sólo que en la columna de Descripción no me localiza nada, en la descripción quisiera que buscara cualquier palabra dentro de la cadena del campo Descripción.

    Cómo puedo acoplar esta consulta en mi boton de buscar??? para que me busque el registro y me ponga en la posición donde se encuentra el mismo???

    Trabajo con SQl

    SELECT     CVE_PRO, CVE_ALT, DESC_PROD, DEPTO, PRESENTACI, MARCA, MODELO, COD_PROV, PROVEEDOR, PROVEEDOR2, PREC_UTC, TASAIMP,
                          PRE_VENT, EXIST, FRACCION, UNID_FRAC, FORM_VENT, PRE_VENTF, ACTUALIZADO, FECH_ACT, FECH_COMP, DESC_REING, NUM_DESREI,
                          TIP_GAN, GAN_FRAC, PREC_COFR, PREC_RIGE
    FROM         PRODUCTOS
    WHERE     (CVE_PRO LIKE @PARAM) OR
                          (CVE_ALT LIKE @PARAM) OR
                          (DESC_PROD LIKE @PARAM) OR
                          (MODELO LIKE @PARAM) OR
                          (COD_PROV LIKE @PARAM)

    El código de mi botón buscar es el siguiente:

    Private Sub tsbtn_search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbtn_search.Click

            Try
                Me.PRODUCTOSTableAdapter.FillDataBy(Me.VENCEDORADataSet.PRODUCTOS, tstxt_seek.Text)
            Catch ex As System.Exception
                System.Windows.Forms.MessageBox.Show(ex.Message)
            End Try
        End Sub

    Saludos.
    miércoles, 11 de noviembre de 2009 0:30

Respuestas

  • El truco para que te busque cualquier palabra en el campo descripción es que tienes que pasarle el valor a buscar entre comodines, es decir, que tu parámetro @PARAM debería valer '%valorABuscar%'. Esto puedes conseguirlo a través del tableadapter pasándole ese texto (con los %) en el argumento:

    Me.PRODUCTOSTableAdapter.FillDataBy(Me.VENCEDORADataSet.PRODUCTOS, "%" & tstxt_seek.Text & "%")

    miércoles, 11 de noviembre de 2009 7:55

Todas las respuestas

  • El truco para que te busque cualquier palabra en el campo descripción es que tienes que pasarle el valor a buscar entre comodines, es decir, que tu parámetro @PARAM debería valer '%valorABuscar%'. Esto puedes conseguirlo a través del tableadapter pasándole ese texto (con los %) en el argumento:

    Me.PRODUCTOSTableAdapter.FillDataBy(Me.VENCEDORADataSet.PRODUCTOS, "%" & tstxt_seek.Text & "%")

    miércoles, 11 de noviembre de 2009 7:55
  • Hola

    Me aparece un error utilizando esa línea que dice así:

    Error    1    Demasiados argumentos para 'Public Overridable Overloads Function FillDataBy(dataTable As VENCEDORADataSet.PRODUCTOSDataTable) As Integer'.     C:\FEVE\admin1\admin1\viewproduc.vb    26    76    admin1

    y bueno la consulta que estoy realizando es:


    SELECT     CVE_PRO, CVE_ALT, DESC_PROD, DEPTO, PRESENTACI, MARCA, MODELO, COD_PROV, PROVEEDOR, PROVEEDOR2, PREC_UTC, TASAIMP,
                          PRE_VENT, EXIST, FRACCION, UNID_FRAC, FORM_VENT, PRE_VENTF, ACTUALIZADO, FECH_ACT, FECH_COMP, DESC_REING, NUM_DESREI,
                          TIP_GAN, GAN_FRAC, PREC_COFR, PREC_RIGE
    FROM         PRODUCTOS
    WHERE     (CVE_PRO LIKE '%@PARAM%') OR
                          (CVE_ALT LIKE '%@PARAM%') OR
                          (DESC_PROD LIKE '%@PARAM%') OR
                          (MODELO LIKE '%@PARAM%') OR
                          (COD_PROV LIKE '%@PARAM%')

    Saludos.

    miércoles, 11 de noviembre de 2009 16:22
  • Tiene toda la pinta de que no has generado en tu tableAdapter la consulta correspondiente. En el código que mostrabas en tu mensaje original tenías esto:

    Me.PRODUCTOSTableAdapter.FillDataBy(Me.VENCEDORADataSet.PRODUCTOS, tstxt_seek.Text)

    Si eso te funcionaba, te tiene que seguir funcionando exactamente igual si cambias tstxt_seek.Text por "%" & tstxt_seek.Text & "%". Si no, quiere decir que ya de entrada no tenías bien definido el tableadapter.
    miércoles, 11 de noviembre de 2009 17:25
  • Hola

    Disculpame pero no lo puedo lograr, la consulta esta bien pero el código que escribo es el que no me funciona como debería.

     Mencione de este error???: "La conversión de "Dato Buscado" en el tipo 'Integer' no es valida." y bueno tengo la siguiente linea DataGridView1.DataSource = PRODUCTOSTableAdapter.GetDataBy(CInt(tstxt_seek.Text)) .

    Bueno pues sigue apareciendo, el error cuando escribe letras o una cadena en el TextBox que realizara el filtro o la busqueda, pero si escribo un número me sale esto:
    "No hay ninguna fila en la posicion (el número que escribi)."

    Bueno por ultima te muestro nuevamente la consulta que tengo y el código cuando la llamo: todo esto bueno basandome en el tutorial que me enviaste y con las correcciones que me proporcionaste.

    Mi consulta:

    SELECT     CVE_PRO, CVE_ALT, DESC_PROD, DEPTO, PRESENTACI, MARCA, MODELO, COD_PROV, PROVEEDOR, PROVEEDOR2, PREC_UTC, TASAIMP,
                          PRE_VENT, EXIST, FRACCION, UNID_FRAC, FORM_VENT, PRE_VENTF, ACTUALIZADO, FECH_ACT, FECH_COMP, DESC_REING, NUM_DESREI,
                          TIP_GAN, GAN_FRAC, PREC_COFR, PREC_RIGE
    FROM         PRODUCTOS
    WHERE     (CVE_PRO LIKE '%@PARAM%') OR
                          (CVE_ALT LIKE '%@PARAM%') OR
                          (DESC_PROD LIKE '%@PARAM%') OR
                          (MODELO LIKE ' % @PARAM % ')
    Se llama:
    GetDataBy

    Mi código:


    Private Sub tsbtn_search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbtn_search.Click

            Try
                DataGridView1.DataSource = PRODUCTOSTableAdapter.GetDataBy(CInt(tstxt_seek.Text))
            Catch ex As System.Exception
                System.Windows.Forms.MessageBox.Show(ex.Message)
            End Try
        End Sub

    Si esto NO me funciona posteare esto de hacer un filtro y busqueda por separado en donde espero contar con tus consultas. GRACIAS.

    Saludos.
    viernes, 13 de noviembre de 2009 18:00
  • El primer error está claro: Si estás haciendo un CInt(txt_seek.Text) y el txt_seek.Text no contiene un Int, pues lógicamente te da un error de que no lo puede convertir a Int.

    Lo que no cuadra es el hecho de que le estés pasando un Int a tu consulta GetDataBy. Si has generado correctamente la query en el TableAdapter, el argumento que recibe tiene que ser del mismo tipo que el parámetro de la consulta SQL (@PARAM). Y tu argumento de la consulta SQL, para que pueda funcionar con los LIKE, tiene que ser de tipo VARCHAR. Al generar el TableAdapter, el varchar se tiene que recibir a través de un parámetro de tipo String. Por lo tanto, no puede admitirte un CInt en el argumento. Así que tienes que tener mal construido el TableAdapter. De ahi debe venir el segundo error.

    viernes, 13 de noviembre de 2009 19:03
  • Hola!

    ¿Fue posible solucionar su problema?

    Gracias!
    Rafael Fagundes - Marque la respuesta como correcta si te ha sido de utilidad!
    jueves, 19 de noviembre de 2009 14:01
    Moderador
  • Hola

    No en realidad no me ha funcionado el query que estoy creando para poder hacer mi filtro o en este caso mi busqueda. Lo siento soy nuevo en esto de SQL Server y pues bueno seguire tratando. Algun comentario de cómo poder hacerlo se los agrdaecería.

    Saludos.
    jueves, 19 de noviembre de 2009 15:48