Hola Alejandro, pues no no funciona como es esperado. En campos numéricos parece no funcionar bien.
Creo que el problema está en xBrowse, prueba el siguiente código en el que incluyo una función de busqueda con unos _ con referencia a la usada en xBrowse.
Code: Select all
#include "fivewin.ch"
#include "xbrowse.ch"
#include "tdolphin.ch"
FUNCTION Main()
LOCAL oServer, oDlg, oQry, oBrw
D_SetCaseSensitive( .T. )
Set_MyLang( "es_ES" )
IF ( oServer := ConnectTo() ) == NIL
RETURN NIL
ENDIF
oQry = oServer:Query( "SELECT id, first, last FROM clientes_copy3 ORDER BY first" )
DEFINE DIALOG oDlg SIZE 565, 480
@ 30, 10 XBROWSE oBrw OBJECT oQry PIXEL SIZE 260, 200 AUTOCOLS AUTOSORT
oBrw:bSeek := { | c | Prueba( c, oBrw ) }
@ 10,10 say oBrw:oSeek prompt "" PIXEL SIZE 300, 15
oBrw:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED
RETURN NIL
//--------------------------------------------
static FUNCTION Prueba( c, oBrw, cQryWhere )
local oQry := oBrw:oMySql
local nStart
local uData, nNum, lRet
local cSortOrder
static aLastRec := {}
nNum = AScan( oBrw:aCols, {| o | !Empty( o:cOrder ) } )
if nNum < 1
RETURN .f.
endif
cSortOrder = oBrw:aCols[ nNum ]:cSortOrder
if Len( c ) == 1
aLastRec := {}
endif
IF Len( aLastRec ) < Len( c )
IF Len( aLastRec ) == 0
nStart = 1
ELSE
nStart = oQry:RecNo()
ENDIF
AAdd( aLastRec, nStart )
ELSE
ASize( aLastRec, Len( c ) - 1 )
IF Len( aLastRec ) == 0
nStart = 1
ELSE
nStart = ATail( aLastRec )
ENDIF
ENDIF
lRet := ( oQry:Seek( c, cSortOrder, nStart - 1, oQry:LastRec(),!oQry:FieldType( cSortorder )=='N', .T. ) != 0 )
return lRet
#include "connto.prg"
#include "setbrw.prg"