Como realizar un filtro en ODBC

Tengo un inconveniente :
Trabajo con Vb6 (sp5) y deseo realizar un filtro de una tabla .DBF (Foxpro 2.6 DOS)para tal efecto me conecto vía ODBC. Les envío el código que empleo:
Private Sub Form_Load()
Set BdMedicamento = New ADODB.Connection
BdMedicamento.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=Medicina"
BdMedicamento.CursorLocation = adUseClient
Dim SQL As String
SQL = "select codigo, descripcio, presenta, precio_v, stock from medicina "
Set CmdMedicamento = New ADODB.Command
Set CmdMedicamento.ActiveConnection = BdMedicamento
CmdMedicamento.CommandType = adCmdText
CmdMedicamento.CommandText = SQL
Set RgMedicamento = New ADODB.Recordset
Set RgMedicamento = CmdMedicamento.Execute
Set DataGrid1.DataSource = RgMedicamento
end sub
PARA REALIZAR EL FILTRO QUE DESO EMPLEO LO SIGUIENTE:
Private Sub Text1_Change()
Dim SQL1 As String
SQL1 = "select codigo, descripcio, presenta, precio_v, stock from medicina where descripcio like '" & Text1 & "%'"
Set CmdMedicamento2 = New ADODB.Command
Set CmdMedicamento2.ActiveConnection = BdMedicamento
CmdMedicamento2.CommandType = adCmdText
CmdMedicamento2.CommandText = SQL1
Set RgMedicamento2 = New ADODB.Recordset
Set RgMedicamento2 = CmdMedicamento2.Execute
Set DataGrid1.DataSource = RgMedicamento2
Call FormateaGrid
End Sub
Que hago mal o como debo de realizar el filtrado...
Les quedare agradecidos

2 respuestas

Respuesta
1
Cambia el % por un * haber i eso te ayuda con el problema que tengas.
Gracias...
Mira cuando yo realizaba un filtrado igual pero con el ADOBC en tiempo de ejecución y con base de datos access, realizaba la búsqueda con el % y que coincidiera con el inicio de los caracteres del campo que buscaba...
Espero tengas alguna otra sugerencia.
Y verdaderamente muchas gracias por tu ayuda y disculpa la incomodidad que te ocasiono
Gracias por tu pronta ayuda..
Lo problema pero sigue igual. Y más aun antes cuando borraba lo ingresado aparecían todos los registros ahora (después de cambiar el % por el *) no aparece nada.
Tendrás otra sugerencia
Entonces dejemos el %, pero la palabra o caracteres a localizar se encuentran al principio, en medio, al final, o en cualquier parte del campo en donde estás buscando y cual es el problema real que se te presenta.
Entonces, de acuerdo a los comentarios, el problema esta en la forma que interpreta la búsqueda el ODBC, ya que lo comentado por tu parte y por la mía es correcto en la forma de la búsqueda, pero con los DBFS, puede ser el problema más grande, no existe forma que vincules tu DBF con una base de datos de access y por ahí puedas realizar la búsqueda, siendo el motor de access el que se ponga a trabajar e interprete la secuencia de acuerdo a como la requieres.
Saludos.. Muchas gracias.
El problema lo solucione poniendo a mayúsculas los datos ingresados en el Text al momento de iniciar la búsqueda (Ucase(text1)). Dado que en la tabla de Fox todos los datos están en mayúscula..
Nuevamente muchas gracias y gracias por el tiempo y ayuda brindada
Respuesta
1
Antes que nada disculpa la demora en contestar pero he estado muy ocupado esta semana.
He visto el código que me has enviado pero no especificas cual es el problema que tienes (¿qué error da?, ¿Qué es lo que no funciona?). Sin embargo yo cambiaría ciertas cosas en el código:
1.- Coloca en todos los módulos donde tengas código "Option Explicit", esto fuerza la comprobación de la declaración de todas las variables que estas usando.
2.- Haz funciones para cada cosa, por ejemplo, una función para hacer la conexión otra para ejecutar comandos.
3.- Coloca un control de errores.
4.- Cuando abras una conexión, comando, o recordset no te olvides de cerrarlo cuando termines de usarlo y limpiar la variable haciendo "Set miVariable = nothing"
5.- Evita en lo posible usar variables globales.
Por otra parte, ten en cuenta que el evento change del campo "Text1", se ejecuta cada vez que cambia su contenido, lo que quiere decir que con cada cambio del campo estas haciendo instancias de las variables "CmdMedicamento2" y "RgMedicamento2" que en ningún momento cierras y limpias. Si bien es cierto que Visual Basic lo está haciendo es mejor que lo controles tú.
Como estás usando un datagrid para visualizar el resultado de la consulta yo te recomendaría desvincular el control antes de hacer la consulta y volver a vincularlo con el nuevo recorset, es decir:
Set DataGrid1.DataSource=Nothing
Set RgMedicamento2=ejecutaComando(BdMedicamento, SQL1)
Set DataGrid1.DataSource=RgMedicamento2
Donde ejecutaComando es una función de las propuestas anteriormente que le pasas el objeto conexión y el string a ejecutar y te devolverá un ADODB. Recordset. Una vez asignado el nuevo recordset es preciso refrescar el control DBGrid después de asignarle el nuevo recordset.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas