Hola Jimmy.
Te paso la función que yo utilizo, de una manera algo distinta a lo que tu quieres pero puede ser que te muestre el camino.
En mi caso yo cargo un grid con los campos que cumple la condición y utilizo (OrdWildSeek( "*" + cCod + "*",.T. ) ), que con los asteriscos "*" me permite buscar en cualquier posición del campo.
Recibe un saludo.
Code: Select all
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// --> Busca_Aprox
// ----------------------------------------------------------------------
// --> Busca registros por aproximación.
// --> Solo cuando son indices Alfabeticos
// ----------------------------------------------------------------------
// --> LLAMADA --> Busca_Aprox(cCod,cArea,nOrden)
// ----------------------------------------------------------------------
// --> DEVUELVE--> Numero del Registro seleccionado - 0 no hay selección.
// ----------------------------------------------------------------------
// --> Parametros
// cCod --> Cadena de Caracteres a buscar
// cArea --> Alias del fichero
// nOrden --> Numero de Indice que se activará para realizar la busqueda.
// ----------------------------------------------------------------------
FUNC Busca_Aprox(cCod,cArea,nOrden)
LOCAL cIndiceActivo , nArea
LOCAL aItem := {}
LOCAL nRec:=0
* msgbox(cCod+" -- "+cArea+" -- "+ str(nOrden) )
nArea := (cArea)->( INDEXORD() )
(cArea)-> (DbSetOrder(nOrden))
cIndiceActivo := (cArea)->( INDEXORD() )
IF TYPE((cArea)->(INDEXKEY(cIndiceActivo)))="C"
(cArea)->(DbGoTop())
// --> No funciona con claves numericas
* DO WHILE IF(TYPE((cArea)->(INDEXKEY(cIndiceActivo)))="N",OrdWildSeek(cCod,.T. ) , OrdWildSeek( "*" + cCod + "*",.T. ) )
DO WHILE (cArea)->(OrdWildSeek( "*" + cCod + "*",.T. ) )
AAdd( aItem, {(cArea)->(FIELDGET(1)),(cArea)->(FIELDGET(2)),(cArea)->(Recno())} )
ENDDO
IF LEN(aItem)>0
DEFINE WINDOW Form_1 AT 0,0 WIDTH 350 HEIGHT 550 ;
TITLE 'Busqueda de Registros' ;
MODAL ;
BACKCOLOR { 209,220,231 } ;
FONT "Arial" SIZE 10 ;
NOSIZE
@ 15,5 GRID Grid_1 ;
WIDTH 335 ;
HEIGHT 500 ;
HEADERS {(cArea)->(FIELDNAME(1)),(cArea)->(FIELDNAME(2)),"Np"} ;
WIDTHS {100,270,3};
ITEMS aItem ;
VALUE 1 ;
ON DBLCLICK (nRec:=VAL(ValorCelda("Form_1", "Grid_1",3)),ThisWindow.Release() )
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
ELSE
lMsgExclamation("No hay Registros","ATENCION")
ENDIF
ELSE
//--> Es númerica, la busco
IF (cArea)->(DbSeek(VAL(cCod)))
nRec:= (cArea)->(Recno())
ENDIF
ENDIF
(cArea)->(DbSetOrder(nArea))
RETURN nRec