Login
`
Templates, Tools and Utilities
|
||
Add a comment to an Icetips ArticlePlease add your comments to this article.
Please note that you must provide both a name and a valid email address in order
for us to publish your comment. Comments are moderated and are not visible until they have been approved. Spam is never approved!
Back to article list Search Articles Add Comment Printer friendly Direct link Par2: Locator on a queue 2001-04-27 -- Robert Pupazzoni it's not necessary to loop thru the entire
queue searching for a partial match...
If a queue GET() fails to locate an exact match, you simply ADD() a "dummy"
record to the queue, primed with the appropriate search fields, then
immediately DELETE() it. The POSITION() function will then return the index
where the record *would have been found* (had it actually been there).
I have successfully used this technique to implement entry and incremental
locators on queue-based browses. Here is an actual code snippet which
implements an entry search on a queue-based browse with multiple sort
orders:
!-------------------------------------------------------------------------
EntrySearch ROUTINE
!-------------------------------------------------------------------------
! First, try to find exact match
sLocator = UPPER(sLocator)
CASE CHOICE(?sSortOrder)
OF 1
qList.INH:Invoice_No = sLocator
GET(qList, -qList.INH:Invoice_No)
OF 2
qList.INH:Inv_Date = DEFORMAT(sLocator, @d2)
GET(qList, -qList.INH:Inv_Date)
OF 3
qList.INH:BL_Number = sLocator
GET(qList, -qList.INH:BL_Number)
END
! Clarion docs incorrectly claim POINTER() is set to closest match on
failed
! lookup. Let's workaround by adding and immediately deleting a dummy
entry
IF ERRORCODE()
! Could not find exact match, add a "dummy" record, primed with the
search parameter
CASE CHOICE(?sSortOrder)
OF 1
qList.INH:Invoice_No = CLIP(qList.INH:Invoice_No) & ALL('<255>')
ADD(qList, -qList.INH:Invoice_No)
OF 2
qList.INH:Inv_Date += 1
ADD(qList, -qList.INH:Inv_Date)
OF 3
qList.INH:BL_Number = CLIP(qList.INH:BL_Number) & ALL('<255>')
ADD(qList, -qList.INH:BL_Number)
END
! Delete the "dummy" record
DELETE(qList)
END
! Now that POINTER() is set correctly, move the hilite bar to closest
matching location
SELECT(?List, POINTER(qList))
Today is November 21, 2024, 6:54 am This article has been viewed 35248 times.
|
|