Scorrere i record avanti e indietro (Parte I)

Nella gestione dei record dei nostri database spesso è necessario implementare la funzione per scorrere i record stessi sequenzialmente.
In questi casi solitamente vengono visualizzati due link che puntano al record precedente ed al record successivo, in questo articolo vediamo come realizzare il tutto attraverso il VBScript e l'SQL.
Per prima cosa creiamo un database ACCESS d'appoggio per effettuare le nostre prove, per comodità basta creare una sola tabella con obbligatoriamente un campo ID (contatore e chiave primaria) ed un paio di campi di qualsiasi genere (nell'esempio 2 campi testo).
La nostra nuova tabella si chiamerà "ESEMPIO" ed il database "DBESEMPIO".

 



Poi inseriamo 5 o 6 record ed il gioco è fatto.

Bene, il nostro database è pronto. Affrontiamo la realizzazione dello script.

Prima di dedicarci al codice vero e proprio analizziamo gli aspetti che caratterizzano la nostra problematica.
Un utente che visualizza la nostra pagina deve avere la possibilità di raggiungere il record successivo o quello precedente semplicemente cliccando su due link.
Questi due link devono contenere le informazioni necessarie per istruire nuovamente lo script sulle azioni da eseguire.
Quali devono essere queste informazioni? Ovviamente il valore dell'ID del record visualizzato e la direzione (direzione intesa come record precedente o successivo).
Inoltre non devono essere tralasciate le condizioni in cui il record visualizzato è il primo della serie o l'ultimo, in questi due casi devono comparire o il solo link che punta al record successivo o il solo link per il record precedente.
Una volta ricevute le informazioni lo script deve decidere se avanzare o retrocedere di un record o visualizzare direttamente un record (condizione ottenuta puntando direttamente ad un record senza passare dai due link di scorrimento).

I casi utili previsti sono 3:
- visualizza il record con ID x
- visualizza il record successivo all'ID x
- visualizza il record precedente all'ID x

Nel primo caso si interroga la tabella con una semplice query che filtra i record per ID

SELECT id, nome, cognome FROM esempio WHERE id = x

Nel secondo caso la query deve restituire il record successivo all'ID x e qui ci viene in aiuto una query leggermente più complessa
 

SELECT TOP 1 id, nome, cognome FROM esempio WHERE id > x

Analizzandola vediamo che vengono selezionati solo i record che hanno ID di valore superiore a quello visualizzato e tra tutti gli ID selezionati si estrae solo il primo (TOP 1) della lista (quello prossimo all'ID di partenza)

esempio:
ID: 1 2 3 4 5 6 7 8
l'ID di partenza è 4
la query seleziona gli ID 5 6 7 8 (maggiori di 4)
ed estrae il record con ID 5 (primo della lista)


Nel terzo caso usiamo la query vista per nel secondo ma con un ulteriore accorgimento
SELECT TOP 1 id, nome, cognome FROM esempio WHERE id < x ORDER BY id DESC
Analizzandola si nota che vengono selezionati solo i record che hanno ID di valore inferiore a quello visualizzato ordinati in ordine decrescente e tra tutti gli ID selezionati si estrae solo il primo della lista

esempio:
ID: 1 2 3 4 5 6 7 8
l'ID di partenza è 7
la query seleziona gli ID 1 2 3 4 5 6 (minori di 7)
li ordina in modo descrescente 6 5 4 3 2 1
ed estrae il record con ID 6 (primo della lista)


Non ci rimane come stabilire se visualizzare entrambi i link di scorrimento (il record visualizzato non è ne il primo ne l'ultimo) o il solo link che punta al successivo (il record visualizzato è il primo) o il solo link che punta al precedente (il record visualizzato è l'ultimo)
Anche in questo caso l'SQL è la nostra arma vincente, bisogna selezionare l'ID di valore maggiore e l'ID di valore minore
SELECT MIN(id), MAX(id) FROM esempio
i due ID estratti vengono messi a confronto con l'ID visualizzato per stabilire se quest'ultimo è maggiore dell'ID di valore minimo e se è minore dell'ID di valore massimo.
Se è maggiore dell'ID di valore minimo allora deve comparire il link al record precedente.
Se è minore dell'ID di valore massimo allora deve comparire il link al record successivo.

esempio 1:
ID: 1 2 3 4 5 6 7 8
l'ID di partenza è 5
l'ID minimo è 1
l'ID massimo è 8
5 è maggiore di 1 quindi deve comparire il link al record precedente
5 è minore di 8 quindi deve comparire il link al record successivo
 
esempio 2:
ID: 1 2 3 4 5 6 7 8
l'ID di partenza è 8
l'ID minimo è 1
l'ID massimo è 8
8 è maggiore di 1 quindi deve comparire il link al record precedente
8 NON è minore di 8 quindi NON deve comparire il link al record successivo
 
esempio 3:
ID: 1 2 3 4 5 6 7 8
l'ID di partenza è 1
l'ID minimo è 1
l'ID massimo è 8
1 NON è maggiore di 1 quindi NON deve comparire il link al record precedente
1 è minore di 8 quindi deve comparire il link al record successivo

Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Redazione
Ti interessano altri articoli su questo argomento?
Chiedi alla nostra Redazione!