Questo mese il corso dedicato a Visual Basic è ancora dedicato ai database. Oggetto di studio sono questa volta i metodi delloggetto Recordset che permettono di effettuare delle ricerche allinterno degli archivi Corso di Visual Basic(Parte 13) di Maurizio Crespi
La soluzione dellesercizio proposto nella scorsa lezione Come sempre, prima dellintroduzione dei
nuovi concetti, è offerta unoccasione di ripasso di quelli già acquisiti in
precedenza. Lo spunto è dato dalla descrizione del programma che costituisce la soluzione
dellesercizio proposto nella scorsa lezione. Private Sub btnNuovo_Click() End Sub Il passaggio al primo o allultimo record presente in archivio A volte, per motivi di estetica, si sente la
necessità di rendere invisibile allutente loggetto di tipo Data. In
questi casi occorre inserire nel form dei pulsanti che consentano la selezione degli
elementi posti in archivio. Private Sub btnPrimo_Click() Un metodo analogo a quello appena descritto consente invece il posizionamento sullultimo record. Il suo nome è MoveLast. La procedura da associare al pulsante btnUltimo, in grado di selezionare lelemento posto in coda allarchivio, è la seguente: Private Sub btnUltimo_Click() Il passaggio al record successivo o precedente Anche per accedere ad un record adiacente è
necessario utilizzare loggetto Recordset. Il metodo MoveNext, infatti,
provvede a fare del record successivo il record corrente. Analogamente, il passaggio
allelemento precedente avviene invocando il metodo MovePrevious. Private Sub btnPrecedente_Click() Le proprietà BOF e EOF Si noti che il frammento di codice sopra riportato provvede a verificare i valori delle proprietà BOF (Beginning Of File) e EOF (End Of File) prima di accedere rispettivamente al record precedente o al successivo. Ciò ha il fine di evitare che siano effettuati dei tentativi di lettura di elementi inesistenti. La ricerca delle informazioni Si supponga di voler dotare la rubrica telefonica della possibilità di ricercare dei nominativi. A tal fine, si aggiunge al form il pulsante btnCerca, a cui è associato il seguente codice: Private Sub btnCerca_Click() La stringa da cercare, richiesta per mezzo della
funzione InputBox, è confrontata con il contenuto del campo Cognome,
associato allelemento txtCognome. La ricerca avviene in modo sequenziale a
partire dal primo record. La soluzione presentata permette di ricercare il primo record
caratterizzato dalluguaglianza del contenuto del campo Cognome rispetto alla
stringa inserita dallutente. Tuttavia, il numero delle righe di codice necessarie
per la sua realizzazione è elevato. Ciò è in contrasto con una della caratteristiche
che fanno dei database delle strutture pressoché onnipresenti in tutte le applicazioni
gestionali, ovvero la possibilità di effettuare delle ricerche in modo semplice e veloce. <oggetto_data>.Recordset.<comando>
"<espressione>" in cui <nome_campo> rappresenta il nome
del campo da usare come oggetto di ricerca e <valore> indica il valore da
ricercare. Si noti che ai comuni operatori di confronto (=, >, <, <>, >=,
<=) ne è stato aggiunto un altro, denominato LIKE. Questultimo permette
di confrontare due stringhe in modo meno rigido rispetto al normale operatore di
uguaglianza. In sostanza, fa sì che la verifica abbia esito positivo non solo se due
stringhe sono identiche, bensì anche quando una costituisce solo linizio
dellaltra. Per comprendere questo concetto, si consideri lesempio che segue. Data1.FindFirst "Nome = Dev" fornisce un esito negativo, in quanto nessun campo denominato Nome contiene esattamente la stringa "Dev". Invece, la riga Data1.FindFirst "Nome LIKE Dev" ha esito positivo perché esiste un elemento che contiene una stringa che inizia con la sequenza "Dev". Si noti che per delimitare le stringhe negli esempi si è fatto uso dellapice (). Luso di questo carattere può talvolta essere causa di problemi, in quanto è spesso utilizzato allinterno delle frasi scritte in lingua italiana. Ad esempio, si osservi la riga Data1.FindFirst "Nome = Viva linformatica" La presenza dellapostrofo fa sì che la stringa da cercare sia interpretata in modo errato; il motore di gestione del database riconosce infatti la sequenza "Viva l". I caratteri mancanti, non essendo riconosciuti come parte della stringa, causano la generazione di un messaggio di errore. Per ovviare a questo inconveniente, è opportuno lutilizzo delle virgolette (") per delimitare le stringhe da cercare. Per consentire che siano interpretate da Visual Basic correttamente, essendo esse utilizzate anche per racchiudere la stringa che costituisce lintero criterio di ricerca, occorre raddoppiarle. La riga Data1.FindFirst "Nome = ""Viva linformatica""" ottiene leffetto desiderato. La proprietà NoMatch Loggetto Recordset è dotato della proprietà NoMatch, che assume un valore booleano che indica se lultima ricerca effettuata è andata a buon fine. Dopo aver eseguito una ricerca per mezzo di uno fra i metodi FindFirst, FindLast, FindNext e FindPrevious, è necessario verificare il valore assunto dalla proprietà NoMatch per sapere se il record desiderato è stato trovato oppure se la ricerca non ha avuto successo. In questultimo caso, la proprietà assume il valore logico True.Si supponga di voler modificare la procedura, descritta in precedenza, associata al pulsante Cerca in modo da far uso del metodo FindFirst. Il codice è il seguente: Private Sub btnCerca_Click() Comè possibile notare, il numero delle righe di codice è diminuito. La nuova procedura si limita a chiedere la stringa da cercare ed a comporre il parametro da passare al metodo FindFirst. Una successiva verifica della proprietà NoMatch permette di stabilire lopportunità della visualizzazione di un messaggio di errore indicante che la ricerca non ha avuto esito positivo. Un esempio Quanto appreso in questa lezione può essere applicato allesercizio descritto allinizio dellarticolo. È possibile dotare la rubrica telefonica di un completo insieme di opzioni di ricerca dei dati. Il codice che costituisce lapplicazione modificata è visibile nel listato 1 ed è disponibile su Internet per il download allindirizzo http://www.infomedia.it. Comè possibile osservare in figura, sono stati aggiunti al form una casella di testo, denominata txtCerca, un pulsante (btnCerca) e 4 option button. La textbox ha lo scopo di contenere la stringa da cercare nel campo Cognome. Si noti che, per esigenze di semplicità, la ricerca è stata limitata a un solo campo. La modalità di ricerca è richiesta allutente per mezzo degli option button. Si tratta di pulsanti caratterizzati dallannullarsi a vicenda. Questo tipo di componenti prende spesso il nome radio button, in quanto ricorda i comandi che permettono di cambiare la banda di frequenze nelle radio. Per mezzo degli option button, lutente può selezionare una sola modalità di ricerca fra quelle disponibili. Esse corrispondono ai metodi FindFirst, FindLast, FindNext, FindPrevious. La ricerca è avviata dalla pressione del pulsante btnCerca. Il codice ad esso associato si limita a comporre la stringa che costituisce il criterio di selezione dei record ed a passarla al corretto metodo in funzione delloption button selezionato, riconosciuto controllando il valori della proprietà value. Se la ricerca non va a buon fine, ovvero se la proprietà NoMatch delloggetto Recordset assume il valore logico true, è visualizzato un messaggio di errore. Conclusioni La potenza e la flessibilità dei database permettono di gestire grandi quantità di informazioni. Grazie ai metodi di ricerca, diventa estremamente semplice provvedere alla localizzazione allinterno degli archivi delle informazioni desiderate. In attesa di approfondire ulteriormente largomento database nel prossimo numero, si provi ad aggiungere alla rubrica telefonica descritta in precedenza la capacità di richiedere una stringa e di contare i record presenti in archivio che contengono nel campo Cognome la sequenza alfanumerica indicata. Bibliografia "Visual Basic 5", McGrawHill, ISBN 88-386-0436-3 Maurizio Crespi si occupa di grafica, multimedialità, amministrazione di reti locali e geografiche, nonché della progettazione e dello sviluppo di applicazioni in C++, Visual Basic, Delphi e Director. Può essere contattato tramite Internet allindirizzo mcrespi@infomedia.it.
|