Ricerca Incrementale Veloce 2: istruzioni per l'uso®

Le applicazioni pratiche di questa "tecnologia" sono moltepliche. Occorre, quindi, prenderla in seria considerazione per navigare velocemente in un database.


© Articolo: Andrea Nicchi Febbraio 2002 - Riproduzione vietata
Email:Andrea Nicchi

Rif precedente articolo: Ricerca Incrementale in VFP)

File allegato: ricincrevelox.zip

Illustriamo con un esempio pratico la ricerca incrementale veloce, analizzazndo gli oggetti: form, textbox e grid che in-sieme forniscono questa utile funzionalità, molto apprezzata dall'utente sia per la sua rapidità che per la sua immedia-tezza.

La tabella
Partiamo dai dati, la tabella su cui vogliamo effettuare la ricerca ha la seguente struttura:

 

Field Type Width Nulls
CODICE Numeric 10 No
LUOGO Character 80 No
PAESE Character 80 No

con due campi indicizzati utilizzando le istruzioni seguenti:

index on transform(luogo.codice,"@L 9999") tag cdc ascending
index on upper(alltrim(luogo.luogo)) tag dsc ascending

come si può notare l'indice sul campo CODICE che è un campo di tipo numerico è stato fatto con un'espressione che ritorna un valore di tipo carattere, perché questo tipo di ricerca incrementale lavoro solo su indici con espressioni di tipo carattere. Colgo l'occasione per sottolineare che gli indici, che non sono altro che "scorciatoie" per accedere ai dati, sono fondamentali in Visual FoxPro, per sfruttare appunto la tanto decantata tecnologia rushmore.


Nel nostro esempio pratico vogliamo selezionare un luogo o per codice o per il suo nome ( vedi figura 1). Dalla figura vediamo sia come appare, nell'esempio allegato al presente articolo la ricerca, sia quali comandi utilizzare per il suo u-so.
Una piccola osservazione, comunque superabile aggiungendo altro codice, questi comandi vengono intercettati quando il cursore si trova all'interno di una delle due textbox.

Manuale operativo di base

TASTO FUNZIONE
RETURN
Conferma la selezione evidenziata.
ESC
Annulla l'operazione di selezione.
TAB
Per posizionar-si da una casel-la di testo all'altra in modo circolare, una volta che il cur-sore si trova in una delle due caselle di testo.

 

Figura 1 - Un esempio di ricerca

Le proprietà della form

Alla form utilizzata per la ricerca sono state aggiunte le seguenti proprietà custom:

HoldValue
LastKeyPressed
TypeOfSeek

ed impostate le proprietà della classe base nel seguente modo:

WindowType 1 - Modal
AlwaysOnTop true


I Metodi della form


Analizziamo il flusso dei dati usati dalla form vedi figura 2. Mediante l' event Init gli vengono passati due valori: il primo indica il tipo di ricerca il secondo l'espressione da utilizzare per il posizionamento iniziale.
Con l'evento Activate posizioniamo il cursore opportunamente in una delle due text box sulla form a seconda del tipo di ricerca iniziale che l'utente vuole fare.

Figura 2: i metodi e gli eventi interessati.

Le caselle di testo

Le due caselle di testo presenti sulla form fanno uso di due eventi, il primo serve per selezionare il relativo indice della tabella su cui effettuare la ricerca, il secondo gestisce ogni tasto digitato dall'utente per una ricerca soft sulla tabella sfruttando le istruzioni SET EXACT OFF e SET NEAR ON.

Figura 3 - Le caselle di testo

Il codice

Diamo un'occhiata a grandi linee al codice:

 

*-- Folder Path
     local m.FolderPath
     m.FolderPath = " qui occorre specificare il folder dove si trova la form e la tabella" 

*-- GLobal Env
     public m.FAIL, m.SUCCESS
     m.SUCCESS = 0
     m.FAIL = 1

*-- Apertura Tabella
     USE (alltrim(m.FolderPath)+"luogo.dbf") exclusive
     index on transform(luogo.codice,"@L 9999") tag cdc ascending
     index on upper(alltrim(luogo.luogo)) tag dsc ascending

*-- Ricerca Incremetale Veloce
     local m.SeekBy, m.Item, m.FeedBack
     m.SeekBy = 1
     m.Item = transform(luogo.codice,"@L 9999")
     m.FeedBack = FAIL

     *-- Ricerca Iniziale per codice
         m.SeekBy = 1
         m.Item = transform(luogo.codice,"@L 9999")
         do form (m.FolderPath+"fis_luogo.scx") with m.SeekBy, m.Item to m.FeedBack
         if m.FeedBack = SUCCESS
                  =MessageBox("Hai confermato la selezione con RETURN !!!",0+16+0,"Attenzione !!!")
         else
                  =MessageBox("Hai annullato la selezione !!!",0+16+0,"Attenzione !!!")
         endif

        *-- Ricerca Iniziale per descrizione
       m.SeekBy = 2
       m.Item = upper(alltrim(luogo.luogo))
       do form (m.FolderPath+"fis_luogo.scx") with m.SeekBy, m.Item to m.FeedBack
       if m.FeedBack = SUCCESS
                =MessageBox("Hai confermato la selezione con RETURN !!!",0+16+0,"Attenzione !!!")
       else
                =MessageBox("Hai annullato la selezione !!!",0+16+0,"Attenzione !!!")
       endif

 

come si puo vedere nel listato per prima cosa occorre impostare il path del folder in cui abbiamo messo i file dell'esempio allegato.
Successivamente viene aperta la tabella ed indicizzata. Questa cosa, in un'applicazione già aperta si presume gia fatta, ma per far funzionare l'esempio occorre provvedere all'inizio del codice.
Seguono, poi, due esempi di ricerca incrementale, il primo per codice (m.SeekBy=1), il secondo per descrizione (m.SeekBy =2).
All'uscita la variabile m.FeedBack mi dice se l'utente ha confermato o meno ciò che ha selezionato per eseguire le op-portune istruzioni.
Una cosa molto importante da sottolineare è che se l'utente non conferma la selezione il numero del record corrente del-la tabella su cui stiamo effettuando la ricerca potrebbe essere qualunque; in ragione di ciò occorre gestire il record cor-rente della tabella eventualmente riportandolo alla posizione che aveva prima di iniziare la ricerca incrementale.

Conclusioni


L'esempio classico illustrato è solo un'idea di quello che si può fare utilizzando la ricerca incrementale veloce, si può, infatti, arricchire l'esempio aumentando le possibilità di ricerca veloce puntuale oppure dando la possibilità di filtrare i dati per classe.

Bibliografia
[1] Andrea Nicchi - "Ricerca Incrementale in Visual Foxpro", PC Programming,

Riferimenti
www.foxitaly.com - "Ricerca Incrementale in Visual Foxpro" di Andrea Nicchi

© Articolo: Andrea Nicchi Febbraio 2001 - Riproduzione vietata
Andrea Nicchi è laureato in Scienze dell'Informazione e si occupa da anni di soluzioni informatiche sia tradizionali che web-based .

© FoxPro e Visual FoxPro sono un marchi registrati da Microsoft Corporation

 



Data: 22/02/2002
webmaster@foxitaly.com

 

dal 22 Giugno 1999