none
Evaluar filtro pero como objeto no como parte de una cadena RRS feed

  • Pregunta

  • Me parece que el titulo no describe esactamente lo que quiero hacer, pero es tal el lio que tengo que ya no se ni lo que quiero :(

    En fin, a ver si me podeis echar un cable,

    Tengo lo siguiente :

                If Me.filtrado <> "" Then
                    nuevosql = nuevosql & " where " & filtro
                End If

    Entonces, la variable  filtro es

    filtro = textbox1.text & "=" & textbox2.text

    Y lo que necesito es que en el momento de correr ese codigo cuando llegue a poner el filtro escriba concretamente los valores de textbox1 y textbox2, no se si consigo explicarme bien, ojala y me entiendan !

    martes, 23 de octubre de 2012 13:48

Respuestas

  • entender se entiende, pero me pregunto porque necesitas definir en un textbox el campo que se usara como filtro? digo esto no deberia ser fijo

    ademas segun el tipo de dato del cmapo varia el filtro si es varchar o sea string deberia ser

    filtro = String.Format("{0} = '{1}'", textbox1.text, textbox2.text)

    o sea se usan camillas simples para el dato, peor si es numerico no se deben usar, esto quizas afecte el filtro


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta mayoko miércoles, 24 de octubre de 2012 7:19
    martes, 23 de octubre de 2012 14:16
  • Hola:

    Entiendo yo que quieres hacer un Select a tu BD pero usando condiciones WHERE como filtros, cierto?, en lugar de hacer esa maraña de concatenaciones analiza el siguiente ejemplo, en particular la consulta SELECT

    Private Sub Button1_Click(...)
    	Try
    	    Dim id As Integer = Cint(TextBox1.Text)
    		Using cnn As New OleDbConnection("Tucadena de conexion")
    			Dim sqlbuscar As String SqlBuscar = "SELECT Nombre FROM TuTabla WHERE Id = @idnumber"
    			Dim cmd As New OledbCommand(Sqlbuscar, cnn) 
    			cmd.Parameters.AddWithValue("@idnumber", Id)
    			Dim da As New OledbDataAdapter(cmd)
    			Dim dt As New DataTable() 
    			da.Fill(dt)
    			Return dt 
    	    End Using 
    	Catch ex As Exception
    		Msgbox(ex.Message)
        End Try 
    End Sub
    Dim sqlbuscar As String SqlBuscar = "SELECT Nombre FROM TuTabla WHERE Id = @idnumber"

    En este caso la consulta devolvera los registros de una tabla "TuTabla" Cuando el campo "Id" sea igual al contenido en el parametro "@idnumber", mismo que llenas:

    cmd.Parameters.AddWithValue("@idnumber", Id)

    Con la variable "Id" mismo que es llenado por el contenido de un TextBox.

    Dim id As Integer = Cint(TextBox1.Text)

    Ahora.

    Si tu quieres seguir bajando el nivel de detalle de tu filtro podrias usar un AND en la consulta SELECT:

    "SELECT Nombre FROM TuTabla WHERE Id = @idnumber AND Fecha_Ingreso = @fecha"
    Analiza, el codigo a detalle y me comentas como te va!




    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta mayoko miércoles, 24 de octubre de 2012 7:19
    martes, 23 de octubre de 2012 14:24

Todas las respuestas

  • Que tipo de objeto es filtrado y nuevosql?

    Lo que pretender hacer es una consulta a una base de datos? con parametros textbox1.text y textbox2.tex?

    martes, 23 de octubre de 2012 14:13
  • entender se entiende, pero me pregunto porque necesitas definir en un textbox el campo que se usara como filtro? digo esto no deberia ser fijo

    ademas segun el tipo de dato del cmapo varia el filtro si es varchar o sea string deberia ser

    filtro = String.Format("{0} = '{1}'", textbox1.text, textbox2.text)

    o sea se usan camillas simples para el dato, peor si es numerico no se deben usar, esto quizas afecte el filtro


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta mayoko miércoles, 24 de octubre de 2012 7:19
    martes, 23 de octubre de 2012 14:16
  • Hola:

    Entiendo yo que quieres hacer un Select a tu BD pero usando condiciones WHERE como filtros, cierto?, en lugar de hacer esa maraña de concatenaciones analiza el siguiente ejemplo, en particular la consulta SELECT

    Private Sub Button1_Click(...)
    	Try
    	    Dim id As Integer = Cint(TextBox1.Text)
    		Using cnn As New OleDbConnection("Tucadena de conexion")
    			Dim sqlbuscar As String SqlBuscar = "SELECT Nombre FROM TuTabla WHERE Id = @idnumber"
    			Dim cmd As New OledbCommand(Sqlbuscar, cnn) 
    			cmd.Parameters.AddWithValue("@idnumber", Id)
    			Dim da As New OledbDataAdapter(cmd)
    			Dim dt As New DataTable() 
    			da.Fill(dt)
    			Return dt 
    	    End Using 
    	Catch ex As Exception
    		Msgbox(ex.Message)
        End Try 
    End Sub
    Dim sqlbuscar As String SqlBuscar = "SELECT Nombre FROM TuTabla WHERE Id = @idnumber"

    En este caso la consulta devolvera los registros de una tabla "TuTabla" Cuando el campo "Id" sea igual al contenido en el parametro "@idnumber", mismo que llenas:

    cmd.Parameters.AddWithValue("@idnumber", Id)

    Con la variable "Id" mismo que es llenado por el contenido de un TextBox.

    Dim id As Integer = Cint(TextBox1.Text)

    Ahora.

    Si tu quieres seguir bajando el nivel de detalle de tu filtro podrias usar un AND en la consulta SELECT:

    "SELECT Nombre FROM TuTabla WHERE Id = @idnumber AND Fecha_Ingreso = @fecha"
    Analiza, el codigo a detalle y me comentas como te va!




    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta mayoko miércoles, 24 de octubre de 2012 7:19
    martes, 23 de octubre de 2012 14:24
  • Hectorrp, Leandro, tienes razon en lo que dices, pero en ese aspecto no tengo problema pues el campo siempre es un campo de texto, el problema lo tengo en que en funcion de la tabla que sea, ese campo se llamara NOMBRE, GRUPO,  FAMILIA, SUBFAMILIA, etc.... entonces por eso no puedo definir por codigo el filtro, si no mas bien yo recogeré ese filtro desde una tabla, a lo mejor no ha sido acertado poner un ejemlpo con los textbox pero ya tengo la cabeza que me arde y ha llegado un momento en el que no se ni que queria hacer....

    Entonces la cosa seria , actualmente yo tengo un filtro que será :

    mifiltro = "where familia = textbox1.text" y al pasarlo por el codigo :

                If Me.filtrado <> "" Then
                    nuevosql = nuevosql & " where " & filtro
                End If

    me devuelve :

    ?nuevosql = select * from mitabla where familia = textbox1.text

    y deberia de ser ( supongmos textbox1 = "perez")

    ?nuevosql = select * from mitabla where familia = perez

    Recuerdo que esto en visual fox pro se podia hacer colocando un & delante de la variable para que no lo tomara como variable sino como el contenido del campo.

    El motivo que tengo par hacerlo asi es que son muchicimos formularios con muchisimos campos, estoy intentando prepararme un formulario que cuando le pase como parametro la tabla de la base de datos me valga para todas.

    Miles Gracias  Otra Vez.

    martes, 23 de octubre de 2012 14:47
  • pero no puedes usar

    mifiltro = "where familia = textbox1.text"

    porque eso hace que el textbox1 forma parte del string, debes poner

    mifiltro = "where familia = " & textbox1.text

    o sea el textbox1 deebs estar por fuera uniendose

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 23 de octubre de 2012 15:40
  • Puff, por fin !! al final la respuesta estaba en lo que me dijo leandro !!

     filtro = String.Format("{0} = '{1}'", Mtextbox1.text_mtb, Mtextbox2.text_mtb)

    Gracias tb. al resto !! LAs marcaré como respuesta todas porque en el fondo todas en una u otra manera hubieran sido utiles.

    miércoles, 24 de octubre de 2012 7:19