Filtro con operadores <= en un grid
Publicado por DarkRusel (9 intervenciones) el 10/03/2009 19:16:46
Antes que nada Buenas Tardes:
Estoy trabajando en un pequeño proyecto donde mi motor de base de datos es access 2003. Mi Pregunta es la Siguiente:
Dentro de mi base de datos tengo la tabla "Repuestos" que contiene el campo "Stock". El campo stock es númerico entero. y lo que quiero lograr es que al buscar los datos de esta tabla se haga un filtrado. Voy a intentar explicar mejor.
En el proyecto tengo un MSHFlexGrid un textbox y un command button. La idea es que cuando escriba un número x en el textbox y precione el command Button Se realize un filtrado de los Datos del campo Stock en la tabla repuestos. El filtrado que quiero lograr es que me muestre todos los campos menores o iguales al número que ingrese en el textbox. (por ejemplo si ingreso el nº 30 me muestre todos los datos que posean en el campo stock los valores menores o iguales a 30). El código que eh utilzado es el siguiente:
Option Explicit
Dim Aux As Recordset
Dim sql As String
Private Sub Command1_Click()
Set Aux = New ADODB.Recordset
sql = "SELECT Repuestos.Cod_Repuesto, Repuestos.Repuesto, Repuestos.Descripcion, Repuestos.Precio_Venta, Repuestos.Stock " & _
"From Repuestos " & _
"WHERE (((Repuestos.Stock)<= '" & Text1.Text & "%'))"
Aux.Open sql, inicial.cn, adOpenDynamic, adLockOptimistic
DibujarGrilla
End Sub
Private Sub DibujarGrilla()
Set MSHFlexGrid1.DataSource = Aux
With MSHFlexGrid1
.ColWidth(0) = 300
.ColWidth(1) = 500
.ColWidth(2) = 2500
.ColWidth(3) = 700
.ColWidth(4) = 2500
.ColWidth(5) = 600
End With
End Sub
Private Sub MSHFlexGrid1_Click()
If Me.MSHFlexGrid1.CellForeColor = &H800000 Then
Call PintarFila(&H80000008, False) 'LetraNegro
Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 0) = ""
Else
Call PintarFila(&H800000, True) 'LetraAzul
Me.MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 0) = "->"
End If
End Sub
Sub PintarFila(color As Variant, SiNo As Boolean)
Dim i As Integer
For i = 0 To Me.MSHFlexGrid1.Cols - 1
Me.MSHFlexGrid1.Col = i
Me.MSHFlexGrid1.CellForeColor = color
Me.MSHFlexGrid1.CellFontBold = SiNo
Next
End Sub
El problema es que cuando aprieto el command Button obtengo el siguiente error:
"No coinciden los tipos de datos en la expresión de criterios". Ahora bien si cambio el tipo de dato en la base de datos al campo Stock. (lo cambio de numérico a Texto). la busqueda se realiza. pero el filtrado que realiza es incorrecto (muestra valores que no son. por ejemplo si pongo el nº 30 me muestra entre los datos mostrados valos como 50 que son mayores a 30).
Si alguien pudiera ayudarme a corregir este error estaría muy agardecido.
Muchas gracias
Estoy trabajando en un pequeño proyecto donde mi motor de base de datos es access 2003. Mi Pregunta es la Siguiente:
Dentro de mi base de datos tengo la tabla "Repuestos" que contiene el campo "Stock". El campo stock es númerico entero. y lo que quiero lograr es que al buscar los datos de esta tabla se haga un filtrado. Voy a intentar explicar mejor.
En el proyecto tengo un MSHFlexGrid un textbox y un command button. La idea es que cuando escriba un número x en el textbox y precione el command Button Se realize un filtrado de los Datos del campo Stock en la tabla repuestos. El filtrado que quiero lograr es que me muestre todos los campos menores o iguales al número que ingrese en el textbox. (por ejemplo si ingreso el nº 30 me muestre todos los datos que posean en el campo stock los valores menores o iguales a 30). El código que eh utilzado es el siguiente:
Option Explicit
Dim Aux As Recordset
Dim sql As String
Private Sub Command1_Click()
Set Aux = New ADODB.Recordset
sql = "SELECT Repuestos.Cod_Repuesto, Repuestos.Repuesto, Repuestos.Descripcion, Repuestos.Precio_Venta, Repuestos.Stock " & _
"From Repuestos " & _
"WHERE (((Repuestos.Stock)<= '" & Text1.Text & "%'))"
Aux.Open sql, inicial.cn, adOpenDynamic, adLockOptimistic
DibujarGrilla
End Sub
Private Sub DibujarGrilla()
Set MSHFlexGrid1.DataSource = Aux
With MSHFlexGrid1
.ColWidth(0) = 300
.ColWidth(1) = 500
.ColWidth(2) = 2500
.ColWidth(3) = 700
.ColWidth(4) = 2500
.ColWidth(5) = 600
End With
End Sub
Private Sub MSHFlexGrid1_Click()
If Me.MSHFlexGrid1.CellForeColor = &H800000 Then
Call PintarFila(&H80000008, False) 'LetraNegro
Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 0) = ""
Else
Call PintarFila(&H800000, True) 'LetraAzul
Me.MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 0) = "->"
End If
End Sub
Sub PintarFila(color As Variant, SiNo As Boolean)
Dim i As Integer
For i = 0 To Me.MSHFlexGrid1.Cols - 1
Me.MSHFlexGrid1.Col = i
Me.MSHFlexGrid1.CellForeColor = color
Me.MSHFlexGrid1.CellFontBold = SiNo
Next
End Sub
El problema es que cuando aprieto el command Button obtengo el siguiente error:
"No coinciden los tipos de datos en la expresión de criterios". Ahora bien si cambio el tipo de dato en la base de datos al campo Stock. (lo cambio de numérico a Texto). la busqueda se realiza. pero el filtrado que realiza es incorrecto (muestra valores que no son. por ejemplo si pongo el nº 30 me muestra entre los datos mostrados valos como 50 que son mayores a 30).
Si alguien pudiera ayudarme a corregir este error estaría muy agardecido.
Muchas gracias
Valora esta pregunta


0