busqueda incremental
Posted: Mon Feb 04, 2013 12:03 am
Hola nuevamente, tengo la siguiente rutina:
Esta rutina lo que hace es un diálogo con un listbox con el campo nombre en el cual hago una búsqueda incremetal sobre el mismo y al aceptar me devuelve el registro que necesito.
De esta forma cuando quiero seleccionar ya sea un cliente o proveedor, si no pongo el número del mismo se abre la ventana y escribiendo sobre el listado se va posicionando hasta que encuentro el buscado, y si no esta, presiono el boton de agregar para hacerlo.
Dos cuestiones, la primera si es posible hacerlo con un xbrowse y búsqueda incremental que trabaje tal cual esta esta rutina( es decir que vaya cambiando mientras tecleo sobre el mismo), intente hacerlo con el seek de xbrowse pero no sé como.
La segunda necesito hacer la misma rutina pero para datos del tipo
175/70/13FIRSIE
175/70/13FIRF57
185/70/13FIRSIE
195/70/14FIRF57
ETC, ETC
son códigos de producto, pero al hacerlo como más arriba no me toma los números, si los escribo con la parte superior del teclado, reconoce los números, pero se va al final del listbox, es decir presiono 1 y ya se va al final del listado, cuando tendría que esperar que marcara el segundo número para moverse. Si en cambio presiono desde el teclado numérico si es el 1 lo reconoce como "a".
Quería hacerlo con xbrowse porque quizás este problema de los números esta resuelto en el código de xbrowse en la busqueda incremental, pero sería importante poder mantener la idea del código que utilizo en clientes y proveedores.
Estoy usando la clase tymsql y xharbour
Luis
- Code: Select all Expand view
- function busnap(olbx,oQry,nclia,oMysql,cConsulta,larchivo)
local lacepto := .F.
local olbm, odlg
local nbut
local surge
local cSeek := ""
DEFAULT larchivo := .f.
if empty(nclia)
if !larchivo //si es que no viene de archivo maestro de clientes
if empty(cConsulta)
oQry := oMysql:Query( "SELECT * FROM maeclie ORDER by nape" )
else
oQry := oMysql:Query( "SELECT * FROM maepro ORDER by nape" )
endif
endif
oQry:gotop()
DEFINE ICON surge resource "icoprog"
DEFINE DIALOG oDlg resource "lisbus_1" ICON surge
odlg:cCaption:= "Clientes"
REDEFINE LISTBOX olbm FIELDS oQry:nape ID 101;
FIELDSIZES 120 HEADERS "Razón Social";
ON DBLCLICK (lacepto:= .t.,odlg:end()) of odlg
mysetother( oLbm, oQry ) //funcion hecha por williams wormar para que funcione el wbrowse de Hernán
olbm:refresh()
olbm:setfocus()
oLbm:bkeydown := {|nkey,nflags| iif(nKey = VK_RETURN, nBut:setfocus(), misteclas(nkey,oLbm,oQry, @cSeek ))}
olbm:nClrBackFocus := CLR_CYAN
olbm:nClrForeFocus := CLR_WHITE
REDEFINE BUTTON NBUT ID 102 ACTION (lacepto := .t.,odlg:end())
REDEFINE BUTTON ID 103 ACTION( clientes( oQry, .t.),olbm:refresh())
ACTIVATE DIALOG ODLG
ELSE //si es que envío el número de código de cliente o proveedor
if empty(cConsulta)
oQry := oMysql:Query( "SELECT * FROM maeclie where ncli=" + alltrim(str(nclia)))
else
oQry := oMysql:Query( "SELECT * FROM maepro where npro=" + alltrim(str(nclia)))
endif
return oQry
ENDIF
if lacepto
iif(!empty(olbx),olbx:refresh(),.f.)
return oQry
endif
RETURN NIL
/***********************************************************************************/
Static function MisTeclas( nKey, oLbm, oQry, cSeek )
Local cTecla := Chr( nKey )
Local cChar := Upper( cTecla )
if nKey = 192
nkey := 209
cTecla := Chr( nkey ) //letra Ñ
cChar := Upper( cTecla )
endif
If nKey >= 30 .AND. nKey <= 132 .or. nKey = 209
cSeek += cChar
Elseif nkey = 8
cSeek := ""
oQry:gotop()
else
return nil
EndIf
do
if oQry:nape = cSeek
olbm:refresh()
exit
endif
oQry:skip()
until oQry:eof()
sysrefresh()
oQry:Refresh()
oLbm:Refresh(.T.)
Return NIL
Esta rutina lo que hace es un diálogo con un listbox con el campo nombre en el cual hago una búsqueda incremetal sobre el mismo y al aceptar me devuelve el registro que necesito.
De esta forma cuando quiero seleccionar ya sea un cliente o proveedor, si no pongo el número del mismo se abre la ventana y escribiendo sobre el listado se va posicionando hasta que encuentro el buscado, y si no esta, presiono el boton de agregar para hacerlo.
Dos cuestiones, la primera si es posible hacerlo con un xbrowse y búsqueda incremental que trabaje tal cual esta esta rutina( es decir que vaya cambiando mientras tecleo sobre el mismo), intente hacerlo con el seek de xbrowse pero no sé como.
La segunda necesito hacer la misma rutina pero para datos del tipo
175/70/13FIRSIE
175/70/13FIRF57
185/70/13FIRSIE
195/70/14FIRF57
ETC, ETC
son códigos de producto, pero al hacerlo como más arriba no me toma los números, si los escribo con la parte superior del teclado, reconoce los números, pero se va al final del listbox, es decir presiono 1 y ya se va al final del listado, cuando tendría que esperar que marcara el segundo número para moverse. Si en cambio presiono desde el teclado numérico si es el 1 lo reconoce como "a".
Quería hacerlo con xbrowse porque quizás este problema de los números esta resuelto en el código de xbrowse en la busqueda incremental, pero sería importante poder mantener la idea del código que utilizo en clientes y proveedores.
Estoy usando la clase tymsql y xharbour
Luis