Aida, buenas noches.
Este ejemplo lo saque de aquí del foro, no recuerdo quien es el autor.
(esta adaptado mi libreria, para manejar las tablas como objetos).
Espero te ayude.
OJO, OCUPAS UN INDICE EN LA TABLA, QUE ESTE ORDENADO POR _ (alfanumericos solamente), POR LOS CUALES
DESEAS HACER LA BUSQUEDA. (yo le llame "portodo", al bag del indice).
Code: Select all
/* --------------------------------------------------------------------------------------------------
Funcion para hacer busquedas estilo LIKE de SQL
-------------------------------------------------------------------------------------------------- */
STATIC Function BuscaLike(t,m)
local oDlg, oBtns[2], oSay[2], oGets[3], aGets[3], oBrw, xFind:='',;
lContinuar:=.F.,aDatos:={{"","","","",0}}, n:=0
aGets[1]:=Space(40)
DEFINE DIALOG oDlg RESOURCE "BUSQUEDAS" TITLE "Busquedas de Articulos"
oDlg:lHelpIcon:=.F.
REDEFINE GET oGets[01] VAR aGets[1] ID 101 OF oDlg UPDATE ;
PICTURE "@!K" ;
ON CHANGE ( oGets[01]:Assign() ,;
xFind:=Alltrim(aGets[1]),;
aDatos:=SacaInf(t , SubStr( aGets[1],1,Len(xFind) ) ),;
Eval(oBrw:bGotFocus),;
oBrw:Refresh() )
oGets[01]:cToolTip := "Digite el Id, Código de barras, Nombre, Modelo"
REDEFINE LISTBOX oBrw FIELDS ;
aDatos[oBrw:nAt,01],;
aDatos[oBrw:nAt,02],;
aDatos[oBrw:nAt,03],;
aDatos[oBrw:nAt,04] ;
HEADERS "Id","Nombre","RFC","Teléfono" ;
SIZES 60,230,100,90;
ID 300 OF oDlg UPDATE
oBrw:SetArray( aDatos )
oBrw:bGotFocus := { || oBrw:SetArray( aDatos ),oBrw:Refresh() }
oBrw:nLineStyle := 6
oBrw:aJustify:={.F.,.F.,.F.,.F. }
REDEFINE BUTTON ID 400 OF oDlg CANCEL;
ACTION (lContinuar:=.T.,;
n:=aDatos[oBrw:nAt,5],oDlg:End() );
WHEN !Empty(aDatos[1,1])
REDEFINE BUTTON ID 401 OF oDlg CANCEL;
ACTION (oDlg:End() )
ACTIVATE DIALOG oDlg CENTERED
If lContinuar
If n>0
(t:nArea)->(OrdSetFocus(2))
(t:nArea)->(dbgoto(n))
t:load()
_mClientes(t,1,.T.,m)
EndIf
Endif
Return Nil
Static Function SacaInf(t,cCadena)
local xDatos:={}, aTemp:={},xCadena:=Alltrim(cCadena), EmptyDatos:={{"","","","",0}}
(t:cAlias)->(dbGoTop())
(t:cAlias)->(OrdSetFocus("portodo"))
WHILE (t:cAlias)->(OrdWildSeek("*"+(xCadena)+"*", .T.))
t:Blank()
t:Load()
aTemp:={}
Aadd(aTemp,t:Id)
Aadd(aTemp,t:Nombre)
Aadd(aTemp,t:Rfc)
Aadd(aTemp,t:Telefono1)
Aadd(aTemp,(t:cAlias)->(Recno()))
Aadd(xDatos,aTemp)
ENDDO
If Len(xDatos) = 0
Return EmptyDatos
EndIf
Return xDatos
El RC del dialogo que se utiliza, no supe como extrarelo de PellesC, pero te comento que tiene los siguientes controles.
UN get para digitar la busqueda.
UN browse, (xbrowse, twbrowse, tcbrowse), el que tu utilices.
DOS botones uno para abrir el registro, y el otro para salir de la consulta.
Saludos.
Ricardo E. Guardado Flores.
GDL. MEX