Grids y cursores

Estoy desarrollando un proyecto de Universidad para manejo de inventario pequeño, y tengo una ventana en la que tengo un grid conectado a la tabla para mostrar todos los artículos, quiero agregar un control de búsquedas, que me permita elegir por que campo buscar, osea código, nombre, precio y que me permita hacer búsquedas sin que el texto esté escrito exactamente como está en la db, ¿me podrías ayudar un poco?
Saludos

1 Respuesta

Respuesta
1
Para el caso que presentás, podrías trabajar con SET FILTER sobre la tabla.
Sopongamos que hay un textbox para poner valor a filtrar y un combo para elegir el campo a usar de filtro (código, nombre y precio).
En el combo seteá la propiedad BoundColumn a 2
En el Init del combo agregá: 15
This.AddListItem("Código", 1, 1)
This.AddListItem("codigo", 1, 2)
This.AddListItem("Nombre", 2, 1)
This.AddListItem("nombre", 2, 2)
This.AddListItem("Precio Unitario", 3, 1)
This.AddListItem("precio", 3, 2)
Suponiendo que la tabla se llama "arts" y los campos son código, nombre y precio (fíjate que guardé el nombre del campo en la segunda columna del combo), poné en el evento InteractiveChange del textbox donde ponés el filtro:
IF NOT EMPTY(ThisForm.combo1.Value)
    IF NOT EMPTY(This.Value)
        LOCAL sCampo, sFiltro, sCad
        sCampo = ALLTRIM(ThisForm.Combo1.Value)
        sFiltro = ALLTRIM(This.Value)
        DO CASE
            CASE TYPE("&sCampo") == "C"
                sCad = "UPPER(ALLTRIM('" + sFiltro + "')) $ UPPER(ALLTRIM(" + sCampo + "))"
            CASE TYPE("&sCampo") == "N"
                sCad = ALLTRIM(STR(VAL(sFiltro), LEN(ALLTRIM(This.Value)), 2)) + " == " + sCampo
        ENDCASE
        SET FILTER TO &sCad INTO arts
    ELSE
        SET FILTER TO .t. INTO arts
ENDIF
ThisForm. Grid1. Refresh
ENDIF
Fíjate que se compone una cadena de validación que después se usa para aplicar el filtro sobre la tabla. Yo te puse una de ejemplo, se puede modificar el modo de validar.
Después hay otras alternativas, como por ejemplo, hacer una consulta SQL sobre la tabla en lugar de usar SET FILTER, donde deberías usar la misma cadena de filtro (sCad) pero en la cláusula WHERE de la consulta.
La forma que uses dependerá principalmente del volumen de datos con el que trabajes. Probá el rendimiento de esta forma, sino vemos la otra.
Espero te haya podido ayudar. Cualquier cosa avisame.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas