Subject |
Re: SEEKER |
From |
Akshat Kapoor <akshat.kapoor@kapoorsons.in> |
Date |
Thu, 3 Jan 2019 17:20:49 +0530 |
Newsgroups |
dbase.getting-started |
On 02/01/2019 14:34, Mervyn Bick wrote:
> On 2019-01-02 10:23 AM, CORNELIUS wrote:
>> Hi threre,
>>
>> I have updated to dbase 12.
>>
>> I have a stock file with a stock description.
>> I know that seeker will shift the active line in a file as you type in
>> the description.
>> I want to be able to type in a part of the description and then the
>> program to list all stock with that part of description.
>> For example if I type in "SILVER" all descriptions with the word
>> "SILVER" in it must be displayed.
>>
>> Hope someone has done this and thanks,Cornelius
>>
>
> The seeker control only finds the first record where the contents of the
> searched field starts with the characters typed into the seeker. The
> more characters entered, the closer the rowpointer gets to the required
> record.
>
> To do what you want you will need to use LIKE in the WHERE clause of a
> parameter driven query's SQL statement. Be aware though that this is
> not really efficient code. On very large tables there may be delays in
> fetching the required records.
>
> LIKE uses % as a wild card for any number of characters. Setting the
> parameter to %SILVER% will find all records where the characters
> SILVER appear anywhere in the field being searched. SILVER% will find
> records where the contents of the field starts with SILVER. This will
> be faster than $SILVER% as the SQL engine can make use of an index to
> help speed up the search.
>
> In the attached example I've used lower() to make the search
> case-insensitive.
This is only required if number of rows is greater than 10K or data is
to be sent over network and is causing slow response due to frequent
requery()
I use a very similar form with the following additions
In form_onOpen event
form.twait = false
form.timer = new timer()
form.timer.parent = form
form.timer.interval = 0.75
form.timer.ontimer = {;form.twait = false ; form.timer.enabled = false;
form.searchcode_onkey2()}
(beware of word wrap in above line)
Replace searchcode with entryfield1
function SEARCHCODE_onKey(nChar, nPosition,bShift,bControl)
if form.twait
// //do nothing
// //We are waiting for additional key strokes
else
form.twait = true
form.timer.enabled = true
endif
return
function SEARCHCODE_onKey2(nChar, nPosition,bShift,bControl)
if sc <> alltrim(upper(form.searchcode.value))
sc = alltrim(upper(form.searchcode.value))
form.invedatamodule1.inve.params["SC"] = "%"+sc+"%"
form.invedatamodule1.inve.requery()
form.rowset.first()
endif
form.mun_grid1.refresh()
return
I have a habit of using upper() to make search case insensitive.
Using this code I wait for 0.75 seconds for additional key strokes
before requery().
This may speed up the process.
Regards
Akshat
|
|