Questo articolo intende mostrare uno dei metodi per
aggiornare simultaneamente tutti i record di una tabella con i dati provenienti
da un modulo di modifica.
Per rendere più chiaro il sistema utilizzato ci avvarremo di un esempio, munendoci di una tabella all'interno della quale sono state preventivamente inserite delle semplici informazioni riferite ad alcuni noti giocatori di calcio.
La tabella utilizzata nel nostro esempio, denominata per chiarezza tGiocatori, è così costituita:
![Vista della tabella tGiocatori](https://static.html.it/app/uploads/documenti/articoli/esempi/articoli_asp/227/tGiocatori.gif)
I singoli campi della tabella sono denominati e contengono
i dati che seguono:
giocatore_id: contatore dei giocatori
giocatore_nome: nome del giocatore
giocatore_cognome: cognome del giocatore
giocatore_reti: numero di reti segnate dal giocatore.
Tutti gli script necessari al funzionamento del sistema proposto
sono contenuti all'interno di tre pagine .asp.
La prima pagina, common.asp [Listato 1], contiene il motore vero e proprio
ed è delegata ad eseguire tutte le operazioni richieste. Al suo interno, infatti, oltre alla connessione al database, sono presenti altre due sub routine deputate al recupero delle informazioni dal database ed all'aggiornamento del medesimo con i nuovi dati. In dettaglio tali sub routine sono definite come segue:
· elencoGiocatori: fornisce in output (utilizzando la dichiarazione byRef) un array bidimensionale con le informazioni che si
riferiscono a ciascun giocatore;
· aggiornaReti: riceve in input i dati relativi all'identificativo e alle reti segnate da ogni giocatore (modificati o meno dall'utente, ma comunque provenienti dal modulo di modifica).
Il sistema inizia ad operare a partire dalla pagina default.asp, nella quale le informazioni riferite ad ogni giocatore vengono riepilogate già all'interno di un modulo di modifica. Il modulo presentato, in particolare, consente di effettuare la modifica del numero di "reti" segnate da ogni giocatore. In maniera del tutto analoga è ovviamente possibile rendere modificabili anche altri campi.
La particolarità del modulo consiste nell'inserimento, in un campo hidden associato a ogni record, dell'identificativo corrispondente al record stesso, a sua volta associato ad un contatore dei record estratti:
Response.Write ("<input type=""hidden""
name=""giocatore_id"& CStr(vx) &"""
value="""& elencoGiocatoriOutput(vx,0) &"""/>")
Per spiegarsi in altri termini, il nome del campo "nascosto" sarà dinamico (incrementato dal contatore del record) ed il suo valore sarà rappresentato dall'identificativo del record.
In questo modo, in sede di recupero delle informazioni, sarà
possibile associare perfettamente i dati di ogni campo al corrispondente record.
Perché il sistema sia ottimizzato al meglio, ci occorre ancora un'altra istruzione: si deve passare il totale dei record estratti per velocizzare
l'aggiornamento. Poiché si tratta di un'informazione di cui possiamo già disporre, provvediamo a trasferire anch'essa alla pagina di modifica all'interno di un campo hidden. È importante avere cura di ridurre di una unità il suo valore in quanto, provenendo da un ciclo for-next, alla conclusione del medesimo avrà un valore maggiorato di uno.
Response.Write ("<input type=""hidden""
name=""tot_giocatori"" value="""& vx-1
&""" />")
Una volta modificati i record nel modulo e premuto il pulsante di invio, le
informazioni sono recuperate nella nuova pagina edit.asp [Listato 2], che procederà ad effettuare l'aggiornamento di tutti i record.
Il cuore vero e proprio dello script è il seguente:
tot_giocatori = Request.Form("tot_giocatori")
For i = 0 to tot_giocatori
myVar = "giocatore_id"& CStr(i)
myID = Request.Form(myVar)
myVar2 = "giocatore_reti"& CStr(i)
myReti = Request.Form(myVar2)
call aggiornaReti(conn,giocatore_id,giocatore_reti)
Next
Recuperato il numero dei record complessivi, si ottiene l'identificativo
di ogni giocatore e le reti segnate da ciascuno (il cui totale può essere stato
modificato o meno) mediante la separazione del contatore che era stato legato al nome del campo del modulo. In questo modo le informazioni risulteranno uniche per ogni record.
La modifica dei record sarà resa infine effettiva con il passaggio alla procedura aggiornaReti delle informazioni relative all'identificativo e alle reti segnate da ciascun giocatore.
I file dell'applicazione, compreso il dartabase, sono disponibili per il download.