Comentario sobre una busqueda...
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
Comentario sobre una busqueda...
Hola a todos...
Lo que pretendo es que al introducir un código me realice una búsqueda en la tabla de articulos y me muestre el nombre de este y la cantidad. El codigo que estoy usando es el siguiente...
Alguien podría decirme si este codigo está mal?
.....
DEFINE FONT oFont NAME "Courier New" SIZE 6, -14
odlg:bKeyChar = { | nKey, nFlags | Search_art(nKey,@cSearch,Nombre ),oSay:REFRESH()}
redefine say oSay prompt cSearch id 130 of odlg
redefine get oGetNombre var nombre id 4004 of odlg
odlg:REFRESH()
ACTIVATE dialog odlg
y la llamada a search_art es la siguiente
*--------------------------------------------------
function Search_art( nKey, cSearch,Nombre )
*--------------------------------------------------
if nKey = 8
cSearch = SubStr( cSearch, 1, Len( cSearch ) - 1 )
else
cSearch += Upper( Chr( nKey ) )
ENDIF
articulos->( DbSeek( cSearch, .t. ) )
nombre:=articulos->nom_art
return nil
La verdad es que no veo en que está fallando... Por cierto si pongo en la funcion de arriba el nkey=13, ¿estoy preguntando si se ha pulsado la tecla intro?
Un saludo y gracias..
Elías Torres
Lo que pretendo es que al introducir un código me realice una búsqueda en la tabla de articulos y me muestre el nombre de este y la cantidad. El codigo que estoy usando es el siguiente...
Alguien podría decirme si este codigo está mal?
.....
DEFINE FONT oFont NAME "Courier New" SIZE 6, -14
odlg:bKeyChar = { | nKey, nFlags | Search_art(nKey,@cSearch,Nombre ),oSay:REFRESH()}
redefine say oSay prompt cSearch id 130 of odlg
redefine get oGetNombre var nombre id 4004 of odlg
odlg:REFRESH()
ACTIVATE dialog odlg
y la llamada a search_art es la siguiente
*--------------------------------------------------
function Search_art( nKey, cSearch,Nombre )
*--------------------------------------------------
if nKey = 8
cSearch = SubStr( cSearch, 1, Len( cSearch ) - 1 )
else
cSearch += Upper( Chr( nKey ) )
ENDIF
articulos->( DbSeek( cSearch, .t. ) )
nombre:=articulos->nom_art
return nil
La verdad es que no veo en que está fallando... Por cierto si pongo en la funcion de arriba el nkey=13, ¿estoy preguntando si se ha pulsado la tecla intro?
Un saludo y gracias..
Elías Torres
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
Hola a todos...
Al final creo que he solucionado el tema con lo que tenia, pero lo que pasa es que no se como refrescar un get....
La informacion a buscar la quiero poner en :
redefine get oGetNombre var articulos->nom_art id 4004 of odlg
He probado a refrescar el odlg completo pero no me refresca ese get. El valor que tiene articulos->nom_art despues de la busqueda es correcto porque pongo un msginfo(articulos->nom_art) y cambia dependiendo de la busqueda, pero luego no me lo pone en el GET..
Alguien sabe por que?
Un saludo y gracias..
Elías Torres.
Al final creo que he solucionado el tema con lo que tenia, pero lo que pasa es que no se como refrescar un get....
La informacion a buscar la quiero poner en :
redefine get oGetNombre var articulos->nom_art id 4004 of odlg
He probado a refrescar el odlg completo pero no me refresca ese get. El valor que tiene articulos->nom_art despues de la busqueda es correcto porque pongo un msginfo(articulos->nom_art) y cambia dependiendo de la busqueda, pero luego no me lo pone en el GET..
Alguien sabe por que?
Un saludo y gracias..
Elías Torres.
- wilsongamboa
- Posts: 439
- Joined: Wed Oct 19, 2005 6:41 pm
- Location: Quito - Ecuador
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
Gracias wilsongamboa, efectivamente era esa boberia....
Una curiosidad, a ver si alguien me puede responder.. Si mirais el procedimiento de arriba vereis que en nkey controlo la tecla que se pulsa. Hasta ahi correcto. Pero mi sorpresa viene cuando compruebo que la tecla intro, tanto en el teclado virtual con en el otro, no tiene su correspondiente numeración. Me explico, si se pulsa la tecla de borrar y ponemos msginfo(nkey) nos devuelve un 8, si pulsamos el espacio nos devuelve un 32 (creo) pero cuando se pulsa en el intro no hace nada. Es como que no tiene accion ninguna. ¿Alguien sabe porque ocurre esto, y si tiene alguna solución?. En mi caso lo que pretendo hacer es que escribo un codigo y hasta que no le de al intro no realiza la actualizacion de la pantalla, pero claro por ahora lo tengo para que me funcione al pulsar el espacio, pero me gustaria que fuera con la tecla intro.
Un saludo y gracias..
Elías Torres.
Una curiosidad, a ver si alguien me puede responder.. Si mirais el procedimiento de arriba vereis que en nkey controlo la tecla que se pulsa. Hasta ahi correcto. Pero mi sorpresa viene cuando compruebo que la tecla intro, tanto en el teclado virtual con en el otro, no tiene su correspondiente numeración. Me explico, si se pulsa la tecla de borrar y ponemos msginfo(nkey) nos devuelve un 8, si pulsamos el espacio nos devuelve un 32 (creo) pero cuando se pulsa en el intro no hace nada. Es como que no tiene accion ninguna. ¿Alguien sabe porque ocurre esto, y si tiene alguna solución?. En mi caso lo que pretendo hacer es que escribo un codigo y hasta que no le de al intro no realiza la actualizacion de la pantalla, pero claro por ahora lo tengo para que me funcione al pulsar el espacio, pero me gustaria que fuera con la tecla intro.
Un saludo y gracias..
Elías Torres.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
Perdona Antonio, se me paso poner el codigo....
Bueno, estas son las dos funciones que estoy utilizando. Lo que pretendo hacer es un inventario, en el que al introducir un codigo muestre la descripcion y las cantidades(estas ultimas se podrán modificar) y asi sucesivamente....
Yo creo que el motivo por el que no funciona el intro (ni en el emulador ni en el teclado) es por el procedimiento de busqueda que realizo, pero mi duda es porque el borrar si lo hace....
Si tienes alguna sugerencia de como realizar la busqueda una vez introducido el codigo, comentamela...te lo agradeceria mucho.
El codigo es el siguiente....
******************
FUNCTION Registros()
******************
local oDlg
LOCAL oGetInventario, oGetNombre, oGetAcumulado, oGetCantidad, LOCAL oGetFecha, cantidad:=0,acumulado:=0, cSearch := "",nombre
SELECT inventario
IF EOF()
c=1
ELSE
inventario->(dbgobottom())
c=val(inventario->numdoc)+1
endif
oGetInventario_cod=RIGHT(STR(1000000+c),6)
oGetFecha=(DTOC(date())+' '+cValToChar((TIME())))
Inventario->(dbappend())
inventario->numdoc:=oGetInventario_cod
inventario->fecha_doc:=oGetFecha
showkeyboard()
(cAliasInventario)->(DbSeek((cAliasArticulos)->cod_art,.t.))
DEFINE dialog odlg resource "Inventario"
redefine group ogrp id 600 of odlg color CLR_RED,RGB(230,184,94)
DEFINE font oFont2 name "Courier New" bold
redefine say id 4001 of odlg color CLR_RED, RGB(230,184,94)
redefine say id 4002 of odlg color CLR_RED, RGB(230,184,94)
redefine say id 4003 of odlg color CLR_RED, RGB(230,184,94)
redefine say id 120 of odlg color CLR_RED, RGB(230,184,94)
redefine say id 4010 of odlg color RGB(1,1,1),RGB(230,184,94)
redefine say id 4011 of odlg color RGB(1,1,1),RGB(230,184,94)
DEFINE FONT oFont NAME "Courier New" SIZE 6, -14
redefine say oSay prompt cSearch id 130 of odlg COLOR CLR_BLACK, CLR_WHITE
oSay:bKeyChar = { | nKey, nFlags | Search_art( nKey, @cSearch),oSay:REFRESH(),oGetNombre:Refresh()}
redefine get oGetAcumulado var acumulado id 4007 of odlg
redefine get oGetCantidad var cantidad id 4005 of odlg
redefine get oGetNombre var articulos->nom_art id 4004 of odlg
redefine get oGetNumDoc var oGetInventario_cod id 4008 of odlg
redefine get oGetFecha_Doc var oGetFecha id 4009 of odlg
odlg:setcolor(RGB(1,1,1),RGB(230,184,94))
inventario->codigo:=articulos->cod_art
inventario->pvp:=articulos->precio
inventario->nombre:=articulos->nom_art
inventario->stock:= acumulado
inventario->cant:= cantidad
ACTIVATE dialog odlg;
on init barra_desplazamiento( odlg)
oFont:End()
RETURN nil
************************************
function Search_art( nkey,cSearch,nombre )
************************************
if nKey = 8 &&equivale a pulsar la tecla de borrar
cSearch = SubStr( cSearch, 1, Len( cSearch ) - 1 )
else
cSearch += Upper( Chr( nKey ) )
ENDIF
IF nKey = 32 &&equivale a pulsar el espacio
articulos->( DbSeek( ALLTRIM(@cSearch)),.t.)
cSearch=""
endif
return nil
Un saludo y gracias.
Elías Torres.
Bueno, estas son las dos funciones que estoy utilizando. Lo que pretendo hacer es un inventario, en el que al introducir un codigo muestre la descripcion y las cantidades(estas ultimas se podrán modificar) y asi sucesivamente....
Yo creo que el motivo por el que no funciona el intro (ni en el emulador ni en el teclado) es por el procedimiento de busqueda que realizo, pero mi duda es porque el borrar si lo hace....
Si tienes alguna sugerencia de como realizar la busqueda una vez introducido el codigo, comentamela...te lo agradeceria mucho.
El codigo es el siguiente....
******************
FUNCTION Registros()
******************
local oDlg
LOCAL oGetInventario, oGetNombre, oGetAcumulado, oGetCantidad, LOCAL oGetFecha, cantidad:=0,acumulado:=0, cSearch := "",nombre
SELECT inventario
IF EOF()
c=1
ELSE
inventario->(dbgobottom())
c=val(inventario->numdoc)+1
endif
oGetInventario_cod=RIGHT(STR(1000000+c),6)
oGetFecha=(DTOC(date())+' '+cValToChar((TIME())))
Inventario->(dbappend())
inventario->numdoc:=oGetInventario_cod
inventario->fecha_doc:=oGetFecha
showkeyboard()
(cAliasInventario)->(DbSeek((cAliasArticulos)->cod_art,.t.))
DEFINE dialog odlg resource "Inventario"
redefine group ogrp id 600 of odlg color CLR_RED,RGB(230,184,94)
DEFINE font oFont2 name "Courier New" bold
redefine say id 4001 of odlg color CLR_RED, RGB(230,184,94)
redefine say id 4002 of odlg color CLR_RED, RGB(230,184,94)
redefine say id 4003 of odlg color CLR_RED, RGB(230,184,94)
redefine say id 120 of odlg color CLR_RED, RGB(230,184,94)
redefine say id 4010 of odlg color RGB(1,1,1),RGB(230,184,94)
redefine say id 4011 of odlg color RGB(1,1,1),RGB(230,184,94)
DEFINE FONT oFont NAME "Courier New" SIZE 6, -14
redefine say oSay prompt cSearch id 130 of odlg COLOR CLR_BLACK, CLR_WHITE
oSay:bKeyChar = { | nKey, nFlags | Search_art( nKey, @cSearch),oSay:REFRESH(),oGetNombre:Refresh()}
redefine get oGetAcumulado var acumulado id 4007 of odlg
redefine get oGetCantidad var cantidad id 4005 of odlg
redefine get oGetNombre var articulos->nom_art id 4004 of odlg
redefine get oGetNumDoc var oGetInventario_cod id 4008 of odlg
redefine get oGetFecha_Doc var oGetFecha id 4009 of odlg
odlg:setcolor(RGB(1,1,1),RGB(230,184,94))
inventario->codigo:=articulos->cod_art
inventario->pvp:=articulos->precio
inventario->nombre:=articulos->nom_art
inventario->stock:= acumulado
inventario->cant:= cantidad
ACTIVATE dialog odlg;
on init barra_desplazamiento( odlg)
oFont:End()
RETURN nil
************************************
function Search_art( nkey,cSearch,nombre )
************************************
if nKey = 8 &&equivale a pulsar la tecla de borrar
cSearch = SubStr( cSearch, 1, Len( cSearch ) - 1 )
else
cSearch += Upper( Chr( nKey ) )
ENDIF
IF nKey = 32 &&equivale a pulsar el espacio
articulos->( DbSeek( ALLTRIM(@cSearch)),.t.)
cSearch=""
endif
return nil
Un saludo y gracias.
Elías Torres.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Elías,
Este ejemplo funciona correctamente:
Este ejemplo funciona correctamente:
Code: Select all
// FiveWin for Pocket PC - Testing browses with incremental search
#include "FWCE.ch"
REQUEST DBFCDX
//----------------------------------------------------------------------------//
function Main()
local oWnd, oBrw, hBmp := ReadBitmap( CurDir() + "\go.bmp" )
local oSay, cSearch := ""
USE ( CurDir() + "\Customer" ) VIA "DBFCDX"
INDEX ON Customer->Last TO "LAST"
Customer->( OrdSetFocus( "LAST" ) )
Customer->( DbGoTop() )
DEFINE WINDOW oWnd TITLE "IncSearch"
@ 1, 1 LISTBOX oBrw ;
FIELDS hBmp, Customer->Last, Customer->First ;
HEADERS "", "Last", "First" ;
SIZE 220, 167
oBrw:bKeyChar = { | nKey, nFlags | Search( nKey, @cSearch ), oBrw:Refresh(),;
oSay:Refresh() }
@ 14, 2 SAY "Searching:" SIZE 60, 30
@ 14, 12 SAY oSay PROMPT cSearch SIZE 80, 30
ACTIVATE WINDOW oWnd ;
ON CLICK MsgInfo( "Click!" )
return nil
//----------------------------------------------------------------------------//
function Search( nKey, cSearch )
#define VK_RETURN 13
if nKey == VK_RETURN
MsgInfo( "ok" )
endif
if nKey = 8
cSearch = SubStr( cSearch, 1, Len( cSearch ) - 1 )
else
cSearch += Upper( Chr( nKey ) )
endif
Customer->( DbSeek( cSearch, .t. ) )
return nil
//----------------------------------------------------------------------------//
-
- Posts: 233
- Joined: Wed Aug 09, 2006 3:07 pm
Antonio, efectivamente el ejemplo que me pasas funciona correctamente pero para mi aplicacion no va..... He estado comparandolos y la unica diferencia que veo es que en el ejemplo se trabaja con un browse y mi aplicacion con un say, ¿puede ser ese el problema?..
**********
Mi aplicacion
**********
oSay:bKeyChar = { | nKey, nFlags | Search_art( nKey, @cSearch),oSay:REFRESH(),oGetNombre:Refresh()}
**********
El ejemplo
**********
oBrw:bKeyChar = { | nKey, nFlags | Search( nKey, @cSearch ), oBrw:Refresh(),oSay:Refresh() }
Ademas he colocado el #define VK_RETURN 13 en el Search(nkey,@cSearch) porque eso si que no lo tenia, pero nada, no va....
Un saludo y gracias.
Elías Torres.
**********
Mi aplicacion
**********
oSay:bKeyChar = { | nKey, nFlags | Search_art( nKey, @cSearch),oSay:REFRESH(),oGetNombre:Refresh()}
**********
El ejemplo
**********
oBrw:bKeyChar = { | nKey, nFlags | Search( nKey, @cSearch ), oBrw:Refresh(),oSay:Refresh() }
Ademas he colocado el #define VK_RETURN 13 en el Search(nkey,@cSearch) porque eso si que no lo tenia, pero nada, no va....
Un saludo y gracias.
Elías Torres.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact: